SQLite - 在导入 table 时跳过非常大的 csv 文件的最后一行

SQLite - skip the LAST line of a very large csv file while importing into a table

在收到的 csv 中,第一行是带列的 header,最后一行是自定义尾部记录,仅记录记录数、文件名等

我们希望能够将这个大文件加载到 sqlite 中以观察某些列,因为 excel 正在努力解决这个问题。另外,像 UltraEdit 这样的工具可以打开这个文件,但是检查列中的某些值是很痛苦的。

SQLite 可以跳过这最后一行,还是应该在我们加载到 SQLite 之前修剪最后一行。我们不希望更改此文件。

环境:Windows。

您可以使用 SQLite CLI program 导入您的 CSV。最简单的形式:

sqlite3 -separator ; test.db ".import test.csv test_table"

并且 test.csv 像这样:

A;B;C
a;b;c
d;e;f
g;h;i
summary line

导入将完成,只会产生警告:

test.csv:5: expected 3 columns but found 1 - filling the rest with NULL

结果是这样test_table:

A B C
a b c
d e f
g h i
summary NULL NULL

用 DELETE 语句删除最后一条记录会很容易。


默认情况下,

The .import dot-command 会将其参数解释为文件名,但当它以管道字符 |.[=22= 开头时,会将其视为 shell 命令]

这意味着您可以 pre-process CSV 文件来消除摘要行,例如 findstr -v:

sqlite3 -separator ; test.db ".import '|findstr -v summary < test.csv' test_table"

您甚至可以制作一个包含点命令和 SQL 的 multi-line 初始化脚本,它会设置您的数据库并将您的输入数据整理成形状。这比把它全部塞进命令行更灵活。

sqlite3 -init import_script.txt test.db