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
在收到的 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