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 子句。
上面的示例显示了 CSV 虚拟表的一个 filename='thefile.csv' 参数。但其他参数也是可能的。
filename=FILENAME
filename= 参数指定一个外部文件,从中读取 CSV 内容。每个 CSV 虚拟表都必须具有 filename= 参数或 data= 参数,但不能同时具有两者。
data=TEXT
data= 参数指定 TEXT 是 CSV 文件的文字内容。
schema=SCHEMA
schema= 参数指定一个 CREATE TABLE 语句,CSV 虚拟表将其传递给 sqlite3_declare_vtab() 接口以定义虚拟表中列的名称。
columns=N
columns=N 参数指定 CSV 文件中的列数。如果输入数据包含的列数超过此数,则会忽略多余的列。如果输入数据包含的列数少于此数,则用 NULL 填充额外的列。如果省略 columns=N 参数,则读取 CSV 文件的第一行以确定列数。
header=BOOLEAN
或仅仅
header
如果 header 参数为真,则将 CSV 文件的第一行视为标题而不是数据。CSV 文件的第二行将成为第一行内容。如果省略 schema= 选项,则 CSV 文件的第一行将确定列的名称。
虚拟表的列名称主要由 schema= 参数决定。如果省略 schema= 参数,但 header 为真,则 CSV 文件第一行中找到的值将成为列名称。如果省略 schema= 参数且 header 为假,则列将分别命名为 "c0"、"c1"、"c2" 等。
此页面最后修改于 2022-01-08 05:02:57 UTC