SQL 命令在到达大型 csv 文件末尾之前终止
Posted
技术标签:
【中文标题】SQL 命令在到达大型 csv 文件末尾之前终止【英文标题】:SQL command terminates before reaching end of large csv file 【发布时间】:2014-10-18 16:17:51 【问题描述】:我有一个大型 csv 文件,其中包含需要能够分析的大量数据(约 6M 行)。我想连接到该文件并对它运行 SQL 命令以仅返回我有兴趣分析的数据。我正在编写的 VBA 在 Excel 2010 中。
当 csv 文件中的行数小于 4432669 时,一切正常。当 csv 文件的行数超过此值时,该命令似乎在文件中的该点终止,并返回它所找到的内容那一点。没有抛出错误(CN.Errors),我首先虽然可能是命令超时,但是当我增加它时它没有任何区别。我还检查了不同的 csv 文件,以防该行包含损坏的数据,但没有运气。记录集 maxrecords 设置为 0(无限制)。
我尝试过使用 Microsoft.Jet.OLEDB.4.0;和 driver=Microsoft 文本驱动程序 (*.txt; *.csv);在连接字符串中,两者的行为与上述相同。
这是我正在使用的测试代码,
Dim CN As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim Err As ADODB.Error
providerstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\cygwin\home\MarkM\csvimport\filtertest4\;" & _
"Extended Properties=" & Chr(34) & "text;HDR=Yes;FMT=Delimited" & Chr(34) & ";"
CN.ConnectionString = providerstr
CN.Mode = adModeRead
CN.CommandTimeout = 900
CN.Open
RS.Open "SELECT exCode FROM 5M_MBP1R04.csv", CN, adOpenStatic, adLockReadOnly
RS.MoveLast
MsgBox "Number of rows = " & RS.RecordCount
For Each Err In CN.Errors
strError = "Error #" & Err.Number & vbCr & _
" " & Err.Description & vbCr & _
" (Source: " & Err.Source & ")" & vbCr & _
" (SQL State: " & Err.SqlState & ")" & vbCr & _
" (NativeError: " & Err.NativeError & ")" & vbCr
If Err.HelpFile = "" Then
strError = strError & " No Help file available"
Else
strError = strError & _
" (HelpFile: " & Err.HelpFile & ")" & vbCr & _
" (HelpContext: " & Err.HelpContext & ")" & _
vbCr & vbCr
End If
Debug.Print strError
Next
非常感谢任何帮助,因为我现在完全陷入困境。
BR 的标记。
【问题讨论】:
如果您有 MS-Access 或 SQL-Server,您可以导入数据作为中间步骤。两者都可以轻松处理 4 M 行。 尝试将光标位置移动到服务器而不是客户端 试过 "RS.CursorLocation = adUseServer" 但得到相同的结果 :-( !! 【参考方案1】:可能由于 CursorType,您超出了内存限制。试试改成adOpenForwardOnly
这是描述光标类型的 MSDN 页面。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms681771(v=vs.85).aspx
【讨论】:
以上是关于SQL 命令在到达大型 csv 文件末尾之前终止的主要内容,如果未能解决你的问题,请参考以下文章
ifstream.eof() - 在真正结束之前到达文件末尾
使用 map reduce 将数据从大型 csv 文件加载到 sql server