小巧. 快速. 可靠.
三者选其二.
CSV 虚拟表

1. 概述

CSV 虚拟表读取 RFC 4180 格式的逗号分隔值,并将内容返回,就像它是 SQL 表中的行和列一样。

CSV 虚拟表对于需要批量加载大量逗号分隔值内容的应用程序非常有用。CSV 虚拟表也可以用作实现其他虚拟表的模板源文件。

CSV 虚拟表没有内置于 SQLite 混合体中。它作为 单独的源文件 提供,可以编译成 可加载扩展。从 命令行 shell 使用 CSV 虚拟表的典型方法如下所示:

.load ./csv
CREATE VIRTUAL TABLE temp.t1 USING csv(filename='thefile.csv');
SELECT * FROM t1;

上面的脚本的第一行使 命令行 shell 读取并激活 CSV 的运行时可加载扩展。对于应用程序,等效的 C 语言 API 是 sqlite3_load_extension()。请注意,文件名扩展名(例如:".dll" 或 ".so" 或 ".dylib")已从扩展文件名中省略。省略文件名扩展名不是必需的,但它有助于使脚本跨平台。SQLite 将自动附加适当的扩展名。

上面的第二行创建了一个名为 "t1" 的虚拟表,该表读取参数中指定的文件的内容。列的数量和名称是通过读取第一行内容自动确定的。CSV 虚拟表的其他选项提供从字符串而不是单独的文件中获取 CSV 内容的能力,并为程序员提供更多对列的数量和名称的控制。这些选项将在下面详细介绍。CSV 虚拟表通常作为 TEMP 表创建,以便它只存在于当前数据库连接中,并且不会成为数据库模式的永久部分。请注意,SQLite 中没有 "CREATE TEMP VIRTUAL TABLE" 命令。相反,在虚拟表的名称前添加 "temp." 模式前缀。

示例中的第三行显示了虚拟表的用法,用于读取 CSV 文件的所有内容。这可能是对虚拟表最简单的使用方式。CSV 虚拟表可以在任何可以使用普通虚拟表的地方使用。可以在子查询或 公用表表达式 中使用 CSV 虚拟表,或者根据需要添加 WHERE、GROUP BY、HAVING、ORDER BY 和 LIMIT 子句。

2. 参数

上面的示例显示了 CSV 虚拟表的一个 filename='thefile.csv' 参数。但其他参数也是可能的。

3. 列名称

虚拟表的列名称主要由 schema= 参数决定。如果省略 schema= 参数,但 header 为真,则 CSV 文件第一行中找到的值将成为列名称。如果省略 schema= 参数且 header 为假,则列将分别命名为 "c0"、"c1"、"c2" 等。

此页面最后修改于 2022-01-08 05:02:57 UTC