一、概述
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'参数。但其他论点也是可能的。
filename=文件名
filename=参数指定从中读取 CSV 内容的外部文件。每个 CSV 虚拟表必须有一个 filename=参数或data=参数,但不能同时有两个。
data=文本
data=参数指定TEXT是 CSV 文件的文字内容 。
schema=模式
schema=参数指定CSV 虚拟表传递给sqlite3_declare_vtab()接口的CREATE TABLE语句,以便定义虚拟表中列的名称。
columns=否
columns= N参数指定 CSV 文件中的列数。如果输入数据包含的列多于此,则忽略多余的列。如果输入数据包含的列较少,则额外的列将用 NULL 填充。如果省略columns= N参数,则读取 CSV 文件的第一行以确定列数。
header=布尔值
或只是
header如果header参数为真,则 CSV 文件的第一行将被视为标题而不是数据。CSV 文件的第二行成为第一行内容。如果省略schema=选项,则 CSV 文件的第一行确定列的名称。
3.列名
虚拟表的列名主要由 schema=参数决定。如果省略schema=参数,但header为真,则 CSV 文件第一行中找到的值将成为列名称。如果省略schema=参数且header为 false,则列命名为“c0”、“c1”、“c2”等。