CSV虚拟表读取 RFC 4180格式的逗号分隔值,并返回该内容,就好像它是SQL表的行和列一样。
CSV虚拟表对于需要批量加载大量逗号分隔值内容的应用程序很有用。CSV虚拟表还可用作实现其他虚拟表的模板源文件。
CSV虚拟表未内置到SQLite合并中。它作为 单独的源文件提供 ,可以编译成可加载的扩展名。命令行外壳中CSV虚拟表的典型用法 如下:
.load ./csv 使用csv(filename ='thefile.csv')创建虚拟表temp.t1; 选择*从t1;
上面脚本的第一行使命令行外壳读取并激活CSV的运行时可加载扩展。对于应用程序,等效的C语言API是 sqlite3_load_extension()。请注意,扩展名中省略了文件扩展名(例如:“。dll”,“。so”或“ .dylib”)。不需要省略文件扩展名,但这有助于使脚本跨平台。SQLite将自动附加适当的扩展名。
上面的第二行创建了一个名为“ t1”的虚拟表,该表读取自变量中命名的文件的内容。列的数量和名称是通过读取内容的第一行自动确定的。CSV虚拟表的其他选项使您能够从字符串而不是单独的文件中获取CSV内容,并使程序员可以更好地控制列的数量和名称。选项详细说明如下。CSV虚拟表通常创建为TEMP表,因此它仅在当前数据库连接中存在,而不会成为数据库架构的永久部分。请注意,SQLite中没有“ CREATE TEMP VIRTUAL TABLE”命令。而是在“温度”之前添加。虚拟表名称的架构前缀。
该示例的第三行显示了正在使用的虚拟表,该虚拟表用于读取CSV文件的所有内容。这可能是对虚拟表的最简单的使用。CSV虚拟表可以在可以使用普通虚拟表的任何地方使用。可以在子查询或通用表表达式中使用CSV虚拟表,也可以根据需要添加WHERE,GROUP BY,HAVING,ORDER BY和LIMIT子句。
上面的示例显示了CSV虚拟表的单个filename ='thefile.csv'参数。但是其他论点也是可能的。
文件名= FILENAME
的文件名=参数指定从哪个CSV内容被读出的外部文件。每个CSV虚拟表都必须具有 filename =参数或data =参数,并且不能同时具有两者。
数据= TEXT
该数据=参数指定TEXT是CSV文件的文字内容。
模式= SCHEMA
该架构=参数指定一个CREATE TABLE语句,该CSV虚拟表传递给sqlite3_declare_vtab()接口,以便在虚拟表来定义列的名称。
列= N
的列= Ñ参数指定在CSV文件的列的数目。如果输入数据包含的列多于此,那么多余的列将被忽略。如果输入数据包含较少的列,则多余的列将填充为NULL。如果省略columns = N参数,则读取CSV文件的第一行以确定列数。
header = BOOLEAN
或只是
header
如果header参数为true,则CSV文件的第一行将被视为标题而不是数据。CSV文件的第二行成为内容的第一行。如果省略schema =选项,则CSV文件的第一行将确定列的名称。
虚拟表的列名主要由schema =参数确定 。如果省略了schema =参数,但标头为true,则在CSV文件第一行中找到的值将成为列名。如果省略了schema =参数,并且标头为false,则列的名称为“ c0”,“ c1”,“ c2”,依此类推。