2009-06-05 12 views
9

Ho 5 large XML files che sono ansioso di analizzare. Tutti sono troppo grandi per essere aperti in un editor di testo e quindi non conosco i loro schemi XML.Importazione di dati XML nel server MS SQL a livello di programmazione

Ho provato a importarli in SQL server, tuttavia il processo mi ha dato un errore anche se sono abbastanza sicuro che sono validi, in quanto sono stati originati da molto rinomati programmatori .

Ho provato anche altri metodi, ma ciascuno lotte con i file di grandi dimensioni (MySQL) o lo stato che i file contengono caratteri XML non validi (accesso & Excel).

In che modo è possibile leggere e inserire i dati a livello di codice nel modo ? Può essere fatto tramite query SQL?

Grazie mille!

+1

Non riesci a tpye il file alla console e guarda il suo schema? http://en.wikipedia.org/wiki/List_of_DOS_commands#type –

+6

giganti file xml senza schemi documentati! = programmatori affidabili –

+0

Ora ho messo una vista dello schema del file sul mio blog. logicflip.com/2009/06/stackoverflow-download-data-schema Spero che aiuti! http://www.jonwinstanley.com/2009/06/stackoverflow-download-data-schema/ –

risposta

1

È necessario conoscere lo schema. Prova a scaricare TextPad o qualcosa di simile per visualizzare i file.

Una volta che conosci lo schema, puoi fare un paio di cose per ottenerle in SQL. Un approccio sarebbe utilizzare OpenXML http://msdn.microsoft.com/en-us/library/ms186918.aspx.

+0

Sto già usando Notepad ++. Di solito è abbastanza solido. Tuttavia questi file variano tra 19mb e 850mb. Sfortunatamente, quello che voglio davvero vedere è il grande. –

+1

L'unico editor che conosco che può gestire file più grandi della RAM è UltraEdit (http://www.ultraedit.com/) –

+0

Ho un sacco di RAM, 1,5 GB (1,05 disponibili). Comunque, darò un'occhiata a UltraEdit. Grazie! –

4

provare il programma di utilità LogParser gratuito da Microsoft: http://www.microsoft.com/DownLoads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en

E 'progettato per fornire l'accesso a SQL-like a grandi file di testo tra cui XML. Qualcosa come

Select top 1000 * from myFile.xml 

... dovrebbe funzionare per iniziare. Inoltre, fai attenzione che la documentazione apparirà nel menu di avvio accanto al file eseguibile dopo l'installazione - non penso che ci sia una buona copia on line.

0

Per la visualizzazione di file di grandi dimensioni, ho trovato il V file viewer eccellente.

L'ho usato su file grandi come 8 GB. Per i file con lunghezza di registrazione fissa, è estremamente semplice navigare in base alle dimensioni del blocco, poiché è basato su disco.

Si noti che non è possibile eseguire modifiche.

Detto questo, una difficoltà con XML è che non è davvero un buon formato per le grandi "flussi", dal momento che ha un inizio e la struttura fine, e un parser che non può contenere l'intero file in memoria potrebbe essere necessario fai alcuni trucchi fantasiosi per assicurarti che sia conforme a un DTD o uno schema.

1

Ho testato l'mssql xml parser ampiamente, l'utilità bcp.exe grandi opere per questo. Il trucco sta arrivando con il terminatore di riga giusto poiché deve essere un valore che non può verificarsi nel documento.Per esempio si può fare questo:

create table t1(x xml) 

ceate un semplice file di testo che contiene solo tuo delimitatore prescelto. Per esempio inserire questa stringa nel delim.txt:

- ++++++++ -

Poi concatenate che alla fine della vostra istanza di un documento, dalla riga di comando:

copia myFile.xml + delim.txt out.xml/b

Dopo questo si può BCP nel database come:

bcp.exe test.dbo.t1 in out.xml -T -c -r - ++++++++ -

Se il documento è UTF-16 quindi sostituire il -c switch con -w

0

Hai provato a utilizzare OPENROWSET per importare i tuoi file XML di grandi dimensioni in una tabella di SQL Server?

CREATE TABLE XmlTable 
(
    ID INT IDENTITY, 
    XmlData XML 
) 

INSERT XmlTable(XmlData) 
    SELECT * FROM 
    OPENROWSET(BULK '(your path)\xmldata.xml', 
    SINGLE_BLOB 
) AS X 

Dal momento che non ho file 5GB a portata di mano, non posso testarlo da solo.

C'è un altro modo per affrontare questo problema: streaming Linq-To-Xml. Controlla questo blog post dove James Newton-King mostra come leggere XElement uno per uno e una serie in due parti here e here sullo stesso argomento dal blog del team Microsoft XML.

Marc

0

È necessario caricare il codice XML in un XML database, ad es. Berkeley DB XML

Inoltre, non sono sicuro che sia possibile ridimensionare a 850mb, ma First Object XML Editor e la libreria parser su cui è stato creato, in grado di gestire file di dimensioni piuttosto grandi.

Inoltre, Baretail dovrebbe visualizzare i file senza problemi.

1

La prima cosa che ho fatto è stato ottenere i primi X byte (ad esempio i primi 1 MB) dei file XML in modo da poterli dare un'occhiata all'editor di mia scelta.

Se avete Cygwin installato siete già in possesso di una simpatica utility GNU per raggiungere questo obiettivo: testa

head.exe -c1M comments.xml > comments_small.xml 

In alternativa si può trovare una porta nativa della maggior parte dei programmi di utilità GNU qui: http://unxutils.sourceforge.net/

+0

Buon piano. Anche se alcuni tag insoliti potrebbero essere saltati nei primi record. –

5

Dal 2013 ...

L'unica volta che l'opzione a mio parere per caricare grandi enormi file/XML in SQL Server risparmio è (come accennato in precedenza qualcuno brevemente) di utilizzare la SQLXML 4.0 biblioteca .

Questa è la soluzione che ho adottato per caricare enormi file XML (7 GB nella dimensione) su base giornaliera. Il processo precedente che utilizzava la manipolazione di C# nell'Attività script ha richiesto ore per essere completato. L'utilizzo di SQLXML 4.0 richiede 15-20 minuti. Come installare SQLXML 4.0. passo dopo passo here. Per esempi pratici su come farlo terminare alla fine follow this MSDN link.

Il mio XML ha anche elementi annidati, quindi è piuttosto complesso, il risultato sono 10 tabelle con da 2,5 a 4 milioni di righe ciascuna (il file giornaliero a volte è più di 7 GB). Il mio lavoro si basava esclusivamente sulle informazioni che ho appreso e applicato dai due collegamenti sopra riportati.

  • Vantaggi:

    • è veloce
    • è Microsoft (http://www.microsoft.com/en-gb/download/details.aspx?id=30403)
    • pacchetto SSIS sarà molto semplificata
    • non c'è bisogno di spendere ore e ore modificare il pacchetto SSIS se lo schema XML cambia. SQLXML è in grado di creare le tabelle in SQL Server per te ogni volta che si esegue il pacchetto, in base alle relazioni XSD fornite.
  • Svantaggi

    • creando l'XSD può richiedere un po 'e richiede una certa conoscenza. Quando l'ho fatto ho imparato qualcosa di nuovo, quindi questo non è stato uno svantaggio per me.
    • quando si vede quanto sia semplice il pacchetto SSIS, il tuo manager avrà l'impressione di non aver lavorato.

per visualizzare i file di grandi dimensioni utilizzano Large Text File Viewer, piccolo gioiello bella.

Nota: la domanda è piuttosto vecchia, ma il "problema" rimane caldo. Ho aggiunto questo post per gli sviluppatori su Google come caricare BULK LOAD file XML in SSIS e atterrare qui.

Problemi correlati