2014-06-24 35 views
0

我每天從供應商那裏獲得一個10 GB XML文件,並且希望將該文件導入到SQL Server表中。 什麼是正確的方法?自動將10 GB XML文件導入SQL Server

+0

什麼是你的服務器類型(Apache,IIS,nginx等)以及你使用什麼服務器端語言(.Net,Php等),你使用的是哪個sql server(Mysql,Mssql等)你試過了,你得到了什麼錯誤,你期望什麼? – HddnTHA

+0

我更喜歡100%的T-SQL解決方案。如果這是不可能的,那麼用C#進行一些處理就可以接受了...... –

回答

1

這是一個很大的舊XML文件。這就是我要做的,在最近的項目中,我收到了相當大的文件以供導入。

首先,我會確保我收到的文件是zip文件或gzip文件,我會在java中執行此操作,但它可以通過python或C#完成。然後,我會在一個流中解壓縮(不是一次只讀整個文件,只是從壓縮流中讀取)。

然後我會解析流解析器中的文件。在Java中我會使用STaX,但在其他語言中,其他選擇將可用。然後,當我讀取XML時,我將收集數據並將其寫入可傳遞給bcp.exe的CSV(製表符分隔)文件。

我不確定數據的結構,但也許可以將它放在一個CSV文件中,也可能需要多種類型的CSV文件。無論哪種方式,我會盡量不要創建大於50MB的CSV。然後,一旦CSV文件的gona超過大小閾值,我會關閉它並將其傳遞給另一個線程並繼續XML解析。

在第二個線程中,我會把它們分發給bcp.exe來加載數據。

如果你需要加載到多個表格,你仍然可以通過一個CSV文件來完成,但是BCP進入一個視圖並且在視圖上有'替代插入觸發器'。這個觸發器可以規範化數據和查找主鍵並插入子表等。

如果你在C#中這樣做,那麼也許你不需要使用bcp.exe作爲natice批量加載它比java API。

這種轉換爲分塊CSV,並行上傳,使用觸發器進行查找的整體方法對我們來說工作得非常好。

我有我的版本,需要一個6GB的XML文件夾,傳播數百個文件,並在幾分鐘內加載到數據庫中。這是對4個表格,但使用一個CSV文件與所有列的聯合。