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

2024-05-01 09:04

本文主要是介绍SQLite如何处理CSV 虚拟表(三十七),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

返回: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”等。

这篇关于SQLite如何处理CSV 虚拟表(三十七)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/951264

相关文章

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核