SQLite如何处理CSV 虚拟表(三十七)

65 篇文章 1 订阅
62 篇文章 4 订阅
本文详细介绍了RFC4180标准在SQLite中的应用,特别是CSV文件格式的使用,包括数据读取、处理、虚拟表创建及其在命令行shell中的应用。重点讲述了CSV文件的结构、参数设置和在SQLite中的应用场景。
摘要由CSDN通过智能技术生成

返回:SQLite—系列文章目录   

上一篇:SQLite的DBSTAT 虚拟表(三十六)

下一篇:SQLite的扩展函数Carray()表值函数(三十八)

RFC4180格式是一种文本文件格式,被用于表格数据间的交互,也可将表格数据转化为纯文本文件进行存储。RFC是“请求评论”,是互联网标准化组织IETF用于记录技术规范、协议以及流程的标准文件的编号。

RFC4180规范定义了一种逗号分隔值(CSV)格式,具体描述了文本文件中的数据格式、分隔符、行尾符等,使得该格式成为一种普遍使用的标准格式。

该格式使用逗号分隔字段,每一行代表一个新的数据行,数据行通常使用回车换行来标识行的结束。列头通常在第一行表述并在数据行之前出现。如果某列出现引号字符,则整个列使用引号括起来。如果引号字符本身是列值,则需要用两个引号字符代替。这个规范还要求在文件的末尾必须有一个换行符。

RFC4180格式被广泛使用,在数据转换和传输等场景中成为了事实上的标准。由于其简单和易于实现,数据处理程序和工具通常都支持RFC4180格式的读取和导出。

CSV文件格式是一种将数据保存在简单文本文件中的方式,其中各项由逗号分隔,每行代表一个数据记录(record)。文件包含以下定义:详细请查询:RFC 4180 - Common Format and MIME Type for Comma-Separated Values (CSV) Files

1. 每个记录由一个换行符(CRLF)分隔。每个记录可以包含多个字段(field),逗号分隔。
例子:  
aaa, bbb, ccc CRLF
zzz, yyy, xxx CRLF

2. 文件的最后一个记录可能具有不完整的结束符。例如:
aaa, bbb, ccc CRLF
zzz, yyy, xxx

3. 可以在文件的第一行中定义包含字段名称的标题行,以 "|" 表示字段间隔。该标题行应包含与该文件中记录中的字段对应的字段名称,且应与该文件中的记录具有相同数量的字段。
例如:

field_name, field_name, field_name CRLF
aaa, bbb, ccc CRLF
zzz, yyy, xxx CRLF
 

4. 在标题行和每个记录中,可以使用一个或多个逗号分隔符分隔各个字段。每行的字段数量应在整个文件中保持一致。任何空格都被视为字段的一部分,不能忽略。记录中的最后一个字段不得后跟逗号。
例如:
aaa, bbb, ccc

5. 每个字段可能或可能不用双引号括起来(但有些程序,如Microsoft Excel,根本不使用双引号)。如果字段未用双引号括起来,则字段中不应出现双引号。如果字段未用双引号括起来,则字段中不应出现双引号。例如: 
"aaa", "bbb", "ccc" CRLF
zzz, yyy, xxx

6. 必须用双引号括起包含换行符(CRLF),双引号和逗号的字段。例如:
"aaa", "b CRLF
bb", "ccc" CRLF
zzz, yyy, xxx
7. 如果使用双引号括起字段,则必须在字段前面加上另一个双引号。例如
"aaa", "b""bb", "ccc"
该文档中给出了一个ABNF语法,用于进一步定义CSV文件的格式。

通过下述方法处理CSV虚拟表数据注意使用CSV虚拟表可以用两种方式进行处理:

使用方法如:

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. 参数说明

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

  • filename=文件名

    filename= 参数指定一个外部文件,从中 读取 CSV 内容。每个 CSV 虚拟表都必须具有 filename= 参数或 data= 参数,而不能同时具有两者。

  • 数据=文本

    data= 参数指定 TEXT 是文本 CSV 文件的内容。

  • schema=架构

    schema= 参数指定一个 CREATE TABLE 语句, CSV 虚拟表传递到 sqlite3_declare_vtab() 接口 order 定义虚拟表中列的名称。

  • 列=N

    columns=N 参数指定列数 在 CSV 文件中。 如果输入数据包含的列数多于此值, 然后忽略多余的列。如果输入数据包含较少的列, 然后用 NULL 填充额外的列。 如果省略 columns=N 参数,则 读取 CSV 文件以确定列数。

  • header=BOOLEAN
    或只是
    header

    如果 header 参数为 true,则 CSV 文件的第一行 被视为标头而不是数据。CSV 的第二行 file 成为内容的第一行。 如果省略 schema= 选项,则 CSV 的第一行 file 确定列的名称。

3. 列名

虚拟表的列名主要由 schema= 参数确定。 如果省略了 schema= 参数,但标头为 true,则 在 CSV 文件的第一行中找到的值将成为列名。 如果省略了 schema= 参数并且标头为 false,则 这些列被命名为“C0”、“C1”、“C2”等。

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

界忆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值