我有一个巨大的XML文件,大约60 GB。我设法用StringBuilder创建一个XML阅读器,在那里我可以提取我需要的特定元素。这非常有效。我还将我的应用程序连接到Lan Microsoft SQL服务器。
如何使用批量插入最有效地插入所有行。我有大约8,400,000行,我需要以最快的方式插入。
我的StringBuilder设置如下字符串:
" FirstVariable,SecondVariable,ThirdVariable; FirstVariable,SecondVariable,ThirdVariable; FirstVariable,SecondVariable,ThirdVariable;"
我需要将其导入为带有批量插入的CSV文件:)请帮助
答案 0 :(得分:3)
如果我理解正确,您可以将巨大的XML转换为CSV文件。
使用此语法,您可以一次性插入CSV文件:
CREATE TABLE testTable(int1 INT,int2 INT, int3 INT);
--Assuming a file with the following content: 1, 2, 3; 4, 5, 6; 7, 8, 9;
BULK INSERT testTable FROM 'F:\testCSV.txt' WITH (FIELDTERMINATOR=',', ROWTERMINATOR=';');
SELECT * FROM testTable;
/*
Result
int1 int2 int3
1 2 3
4 5 6
7 8 9
*/
DROP TABLE testTable;
您可能会尝试避免CSV转换并直接导入,但这可能会尝试将XML加载为一块,60GB非常多......
CREATE TABLE testTable(int1 INT,int2 INT, int3 INT);
/*
Assuiming a file with the following content:
<data>
<row>
<a>1</a>
<b>2</b>
<c>3</c>
</row>
<row>
<a>4</a>
<b>5</b>
<c>6</c>
</row>
<row>
<a>7</a>
<b>8</b>
<c>9</c>
</row>
</data>
*/
INSERT INTO testTable
SELECT RowData.value('a[1]','int')
,RowData.value('b[1]','int')
,RowData.value('c[1]','int')
FROM
(
SELECT CAST(x.y AS XML) AS XmlData
FROM OPENROWSET(BULK 'F:\testXML.xml',SINGLE_CLOB) AS x(y)
) AS XmlData
CROSS APPLY XmlData.nodes('/data/row') AS x(RowData)
SELECT * FROM testTable;
/*
Result
int1 int2 int3
1 2 3
4 5 6
7 8 9
*/
DROP TABLE testTable;
最后但并非最不重要的是,您将在此处找到如何使用明确指定的格式文件直接对XML文件使用BULK INSERT
的说明:https://msdn.microsoft.com/en-us/library/ms191184.aspx
答案 1 :(得分:1)
我终于明白了。我在while循环之前创建了一个数据表,然后在提取数据时将每个元素添加到数据表中。然后我在while循环中创建了一个计数器,它将每5000个元素连接到数据库并批量插入它们并在此之后清空数据表。这样就可以只使用几MB内存,并且我可以运行整个60 GB文件,并在大约12分钟内将所有8,400,000个元素解析到我的数据库。我使用的批量插入代码非常标准,这是我的解决方案的一部分:
Using bulkCopy As SqlBulkCopy =
New SqlBulkCopy("Server=testserver;Database=test1;User=test1;Pwd=12345;")
bulkCopy.DestinationTableName = "dbo.testtable"
bulkCopy.BatchSize = 5000
Try
' Write from the source to the destination.
bulkCopy.WriteToServer(table)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Using
答案 2 :(得分:0)
尝试使用SqlBulkCopy从csv
插入批量记录