sql-server - 从大量数据中搜索字符串(CSV文件中的数百万条记录)
问题描述
我在 csv 文件中有数百万条记录,我需要进行字符串比较并在 Bootstrap 数据表中显示过滤后的记录。CSV 文件每天更新数百万条记录。
注意:如果我将 csv 文件导入 sql 数据库并在表中应用搜索查询以获取结果,则需要很多时间。
我可以在不将其导入 SQL 的情况下从 csv 文件中进行搜索吗?是否有任何特定的方法/方式来存储数据?是否有任何文本搜索工具或可以在 MS SQL 中完成?每一个帮助将不胜感激。
解决方案
您可以使用直接在 SQL ServerOPENROWSET
中读取文件CSV
您将需要启用“即席分布式查询”:
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
GO
EXEC sp_configure 'ad hoc distributed queries', 1
GO
RECONFIGURE
GO
然后以这种方式定义数据源:
SELECT *
FROM OPENROWSET(
'Microsoft.ACE.OLEDB.12.0',
'Text;Database=C:\Temp\;IMEX=1;', -- the path to csv file
[data_file#csv] -- csv file name, please note # instead of dot
) as t
如果您的文件是真正的 CSV(逗号分隔),那么它应该使用默认设置。
如果您的文件不是真正的 CSV(逗号分隔),您可以定义自己的文件格式,只需将名为“ SCHEMA.INI
”的文件放在 csv 文件的同一文件夹中即可。
此 schema.ini 文件必须包含一个包含数据文件结构定义的部分。(请参阅此处的详细信息Schema.ini 文件(文本文件驱动程序))
例子:
[data_file.csv]
Format=Delimited(;)
DecimalSymbol=.
ColNameHeader=True
MaxScanRows=10
Col1=ID Long
Col2=DESCR char width 4
Col3=FIELD_X char width 255
Col4=FIELD_Y DateTime
...
...
Coln=aFieldName aDataType aWidth
推荐阅读
- generics - Swift 泛型字典或字典数组
- google-sheets - 我需要在 Google 表格中“加入”多个查找
- c# - 如何对时间列表(“时钟”)的相邻值的差异求和?
- laravel - 如何在 Lumen 应用上使用 docker 容器解决 heroku 部署的 503 错误
- excel - 剪切行并粘贴到上面的一个单元格中 - 复制和粘贴区域的运行时间错误与重叠不匹配
- c# - 使用 jquery 或 javascript 在 GridView 的 TemplateField 中查找控件
- .net - 如何通过 Powershell 更新 AppDynamics .net 代理?
- android - 如何解析和显示响应 Okhttp 的代码?
- dart - Flutter - 有没有办法只使用 IconButton(不创建应用栏)来打开抽屉?
- unity3d - 使用 Unity Physics 将球持续反弹到相同的高度