使用 SQLite 加载多个 CSV 文件

Omr*_*mri 7 csv sqlite

我正在使用 SQLite,我需要将数百个 CSV 文件加载到一个表中。我没有设法在网上找到这样的东西。是否可以?

请注意,一开始我使用了 Oracle,但由于 Oracle 每个表有 1000 列的限制,而我的 CSV 文件每个都有超过 1500 列,我不得不找到另一种解决方案。我不想尝试 SQLite,因为我可以快速轻松地安装它。这些 CSV 文件已经提供了诸如列的数量,我无法更改或拆分它们(不管为什么)。

请指教。

rod*_*ece 8

我遇到了类似的问题,对您问题的评论实际上给了我最终对我有用的答案

第 1 步:将多个 csv 合并到一个文件中。排除其中大多数的标题,但在开始时记下其中一个的标题。

第 2 步:将单个合并的 csv 加载到 SQLite 中。

对于第 1 步,我使用了:

$ head -1 one.csv > all_combined.csv
$ tail -n +2 -q *.csv >> all_combined.csv
Run Code Online (Sandbox Code Playgroud)

第一个命令只写入 csv 文件的第一行(您可以选择任何一个文件),第二个命令从第 2 行开始写入整个文档,因此不包括标题。该-q选项确保tail永远不会将文件名作为标题写入。

要加载到 SQLite(第 2 步)中,Hot Licks 给出的答案对我有用:

 sqlite> .mode csv
 sqlite> .import all_combined.csv my_new_table
Run Code Online (Sandbox Code Playgroud)

这假设my_new_table尚未创建。或者,您可以预先创建然后加载,但在这种情况下,从步骤 1 中排除标题。


Hot*_*cks 2

http://www.sqlite.org/cli.html --

使用“.import”命令将 CSV(逗号分隔值)数据导入到 SQLite 表中。“.import”命令采用两个参数,分别是要从中读取 CSV 数据的磁盘文件的名称和要向其中插入 CSV 数据的 SQLite 表的名称。

请注意,在运行“.import”命令之前将“mode”设置为“csv”非常重要。这对于防止命令行 shell 尝试将输入文件文本解释为其他格式是必要的。

sqlite> .mode csv
sqlite> .import C:/work/somedata.csv tab1
Run Code Online (Sandbox Code Playgroud)

需要考虑两种情况:(1) 表“tab1”先前不存在,(2) 表“tab1”已经存在。

在第一种情况下,当该表先前不存在时,系统会自动创建该表,并使用输入 CSV 文件第一行的内容来确定表中所有列的名称。换句话说,如果该表以前不存在,则 CSV 文件的第一行将解释为列名称,实际数据从 CSV 文件的第二行开始。

对于第二种情况,当表已经存在时,CSV 文件的每一行(包括第一行)都被假定为实际内容。如果 CSV 文件包含初始行列标签,则该行将作为数据读取并插入到表中。为了避免这种情况,请确保该表以前不存在。


请注意,您需要确保文件没有定义字段名称的初始行。而且,对于“数百个”文件,您可能需要准备一个脚本,而不是单独键入每个文件。