【问题标题】:Search string from large amount of data(millions of record in CSV file)从大量数据中搜索字符串(CSV文件中的数百万条记录)
【发布时间】:2020-03-15 21:27:03
【问题描述】:

我在 csv 文件中有数百万条记录,我需要进行字符串比较并在 Bootstrap 数据表中显示过滤后的记录。 CSV 文件每天更新​​数百万条记录。

注意: 如果我将 csv 文件导入 sql 数据库并在表中应用搜索查询以获取结果,则需要很多时间。

我可以在不导入 SQL 的情况下从 csv 文件中进行搜索吗? 是否有任何特定的方法/方式来存储数据? 是否有任何文本搜索工具或可以在 MS SQL 中完成? 我们将不胜感激。

【问题讨论】:

  • 这个问题可能过于宽泛,不适合我们通常接受的关于 SO 的有效问题。您实际上是在问“我如何在文件中找到文本”,我们可以想出 100 种不同的方法,但没有一种方法对您有效。我建议你努力提高数据库搜索的性能,阅读索引/全文搜索

标签: sql-server large-data


【解决方案1】:

您可以使用OPENROWSET 直接在 SQL Server 中读取您的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 File (Text File Driver)

例子:

[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

【讨论】:

    【解决方案2】:

    我可以在不导入 SQL 的情况下从 csv 文件中进行搜索吗?

    是的,有很多方法。如果您使用的是 Windows,则可以使用命令提示符 find 命令。 find "string to find" C:\Windows\file.csv

    是否有任何特定的方法/方式来存储数据?

    取决于你需要对你的比赛做什么。您需要对结果做什么?

    是否有任何文本搜索工具或可以在 MS SQL 中完成?

    两者都是。如果数据库不是关系型的,那么数据库可能不是存储数据的最佳位置。如果您需要在这些文本文件中查找特定模式,请查看正则表达式。

    【讨论】:

    • 我可以使用 sql 查询在 csv 中搜索而不将其导入 sql 吗?
    • 可以,不用先导入数据就可以使用SQL搜索文本。请参阅@MtwStark 的帖子了解如何执行此操作。完整的文档是here
    猜你喜欢
    • 2021-03-15
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2015-05-13
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多