Dataworks数据集成之“文本数据”

本文涉及的产品
大数据开发治理平台DataWorks,Serverless资源组抵扣包300CU*H
简介: Dataworks不是支持文本数据导入么?为什么Excel数据不能导入?CSV文件不就是Excel文件么?关于这些问题,我整理了一篇文章进行解释。


你可能想不到,我也是想不到,到现在还有人不知道什么是CSV格式的文本数据。最关键的是,不知道的人并不认为自己不知道,这就尴尬了···大家都认为自己知道,但是确实这个认知是有差异的。

某项目咨询我一个问题:“CSV格式的文本数据,Dataworks的数据集成有问题,总报错。该怎么办?”我立即就反驳了:“我这么多年怎么从未遇到过,我们好多项目正在大规模的使用,从未反馈过这类问题啊?”于是我意识到一个问题:这个CSV格式估计不是标准的CSV格式,而是自以为的CSV格式。

或者常有这种说法“我提供了Excel文件,为什么导入不了?”,把csv文件默认为就是Excel文件。而当我提醒对方:“这是两种不同的文件类型,Excel是Office办公软件的一种特有的二进制文件格式,而CSV格式是一种文本格式的数据格式。”。又会陷入另外一个困境,就是:“为什么Excel不是一个文本格式?什么是文本格式?”。总的来说太难了,这也是我不得已写这篇文章的原因。虽然我感觉我可能很努力,也可能还是没办法讲的很清楚。

1-Excel与CSV

什么是 .csv 文件?

CSV 文件是一种简单类型的纯文本文件,它使用特定的结构来排列表格数据。CSV 文件的标准格式由行和列数据定义(行和列构成了一个二维表格),其中换行符终止每一行以开始下一行,并且每一列在行内用逗号分隔。CSV文件中的某一个值文本中如果包含逗号、换行符、双引号则需要用2个双引号把这个值包含起来,如果这里还包含双引号,则需要在每个值中的双引号前面加一个双引号进行转义。(这里提到的字符,都指ASCII字符,而不是中文字符)

什么是 纯文本文件?

个人认为纯文本文件这个概念,就是在windows/linux操作系统上用文本编辑器可以直接打开阅读的,并且这些文本没有任何格式(比如字号、颜色等任何修饰),官方解释可以在“参考”章节查看“纯文本文档”。

什么是 Excel 文件?

Microsoft Excel 是 Microsoft 办公套件中包含的电子表格软件。它广泛用于创建指定计算、库存跟踪、会计等的数字和公式的表格和网格。

CSV与Excel的对比

Excel

CSV

Excel 是一种电子表格,可将文件保存为自己的专有格式,即 xls 或 xlsx

CSV 是一种将表格信息保存到扩展名为 .csv 的逗号分隔文本文件中的格式

Excel 二进制文件文件只能用电子表格软件或者支持Excel的软件打开

CSV 是一种纯文本文件,可以使用任何文本编辑器打开,例如记事本、vi、word、Excel等。

Excel不仅可以存储数据,还可以对数据进行操作

CSV 是一个文本文件,它存储数据但不包含格式、公式、宏等。它也称为平面文件

除了文本,数据还可以以图表和图形的形式存储

Excel 可以连接到外部数据源以获取数据。您可以在 Excel 中使用自定义加载项来增加其功能。Excel 允许通过详细的跟踪和评论功能查看数据。

任何解析 Excel 数据的编程语言库通常都较大、较慢且复杂

解析 CSV 数据的任何编程语言都是微不足道的,生成它非常容易

Excel 在导入数据时消耗更多内存

导入 CSV 文件可以更快,而且消耗的内存也更少

 

通过上面的对比,我们可以看到CSV文件与Excel文件是2种完全不同的文件类型。Excel文件是一种复杂的二进制文档格式,可以包含很多高级能力,而CSV文件只是一种纯平面的文本文件。

2-CSV格式标准

在上一节中我对CSV文件有了一个定义,这个定义比通常描述的逗号分隔的文本文件要丰富一些。如下:

1-文件类型。CSV文件是一种简单类型的纯文本文件,它使用特定的结构来排列表格数据。

2-分隔符。CSV 文件的标准格式由行和列数据定义(行和列构成了一个二维表格),其中换行符终止每一行以开始下一行,并且每一列在行内用逗号分隔。

3-文本边界与转义。CSV文件中的某一个值文本中如果包含逗号、换行符、双引号则需要用2个双引号把这个值包含起来,如果这里还包含双引号,则需要在每个值中的双引号前面加一个双引号进行转义。(这里提到的字符,都指ASCII字符,而不是中文字符)

4-编码与换行符。CSV文件没有明确定义字符编码与换行符,也就是说任何字符编码都可以被使用,不管是Windows还是linux、unix、Mac换行符都是可以用的。只要保存与打开的时候保持一致即可。

这个CSV文件的定义是我从各种文档中总结整理出来的,显然并不是那么全。一定有遗失和不完全的地方,这就需要标准。很快我也找到了关于CSV的标准:RFC4180、RFC7111。

什么是RFC4180文件格式?【https://www.rfc-editor.org/rfc/rfc4180.html

RFC4180是一种规范,定义了一种常见的CSV文件格式。根据这个规范,CSV文件由多个行组成,每行由逗号分隔的字段组成。字段可以包含文本、数字或日期等数据。在RFC4180规范中,字段中的文本可以包含引号,并使用双引号进行转义。这意味着如果字段中包含逗号或双引号,可以使用双引号将其括起来。

与我们场景的IEEE/ISO标准或者GBT标准不同,Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件。RFC文件是由Internet Society(ISOC)赞助发行。基本的互联网通信协议都有在RFC文件内详细说明。RFC文件还额外加入许多在标准内的论题,例如对于互联网新开发的协议及发展中所有的记录。因此几乎所有的互联网标准都有收录在RFC文件之中。

关于CSV的标准有2个,主要是RFC4180,作为补充的是RFC7111。我本来希望好好阅读一下,不过真是看着困难。看了半天该如何读懂RFC文件的文档,感觉有点浪费时间,索性下面就用Excel这个CSV标准的实践来了解。

3-CSV格式数据简单实践

如果你也跟我一样对标准理解困难,也不看那个上面哪些内容。你自己拿Excel软件,自己编辑点数据进去,另存为“.csv”文件。下面就是我制造的测试文件:

image.png 

这里我构造了几个特殊的例子:

1-1个单元格中文本中有换行,如上图C3列。

2-1个单元格中文本以双引号开始,有1个,有2个,如上图B2、B4。

3-1个单元格中文本不以双引号开始,包含1个,包含3个,如上图A3、A6。

4-1个单元格中文本以逗号开始,包含1个逗号,3个逗号,逗号结尾,如上图A5,B5,C5。

5-1个单元格中文本包含斜杠、反斜杠,如C5、A4。

 

下面是我构造了几个特殊的例子在文本编辑器中的展示:

image.png 

1-使用微软的Excel软件,另存为CSV文件,换行符保存为Windows的换行符(CRLF)。但是我在Mac系统输入的C3列的换行符是Unix的换行符(LF)。为此我试了下,在命令行下使用vi编辑的文件默认的换行符也是(LF)。至于为什么不是Mac的换行符(CR),我也没搞懂。

2-双引号如果出现在单元格文本中第一个字符,那么会有2个双引号要把这个双引号包含起来,还得有一个双引号作为转义字符,所以,一个双引号变成了2(边界)+1(转义)+1=4个,两个双引号变成了2(边界)+2(转义)+2=6个。于是B2的2个双引号变成了6个,B4的1个双引号变成了4个。

3-如果单元格文本的第一个字符不是双引号,而在后面的字符中有双引号,则不会有文本界定符也不会有转义,还是原来的样子。

4-如果单元格文本中包含逗号不论在什么位置,单元格所有的文字都会被文本界定符双引号包含起来。

5-不论是斜杠还是反斜杠都不触发文本界定符和转义符“双引号”,CSV文件的转义符号是双引号。

微软帮助文档对CSV格式文件的描述为:“将工作簿另存为以逗号分隔的文本文件,以便在其他 Windows 操作系统上使用,并确保正确解释制表符、换行符和其他字符。 仅保存活动工作表。”

凡是符合以上实践标准的数据格式的CSV格式的文件,是可以被Excel识别的,也是可以被Dataworks识别的。

4-Dataworks对CSV文件的支持

Dataworks支持文本文件类型很多,一般CSV文件导入常见于textfile,或者是FTP上的textfile、OSS上的textfile。如下:

image.png

image.png

以上来源于:https://github.com/alibaba/DataX

我引用了datax的官方文档来做说明,因为DataWorks离线数据集成文本文件底层使用的是datax。以读取文本文件的组件TxtFileReader来做说明。

TxtFileReader实现了从本地文件读取数据并转为DataX协议的功能,本地文件本身是无结构化数据存储,对于DataX而言,TxtFileReader实现上类比OSSReader,有诸多相似之处。目前TxtFileReader支持功能如下:

l 支持且仅支持读取TXT的文件,且要求TXT中shema为一张二维表。

l 支持类CSV格式文件,自定义分隔符。

l 支持多种类型数据读取(使用String表示),支持列裁剪,支持列常量

l 支持递归读取、支持文件名过滤。

l 支持文本压缩,现有压缩格式为zip、gzip、bzip2。

l 多个File可以支持并发读取。

暂时不能做到:

l 单个File支持多线程并发读取,这里涉及到单个File内部切分算法。

l 单个File在压缩情况下,从技术上无法支持多线程并发读取。

参数说明

l path

描述:本地文件系统的路径信息,注意这里可以支持填写多个路径。

当指定单个本地文件,TxtFileReader暂时只能使用单线程进行数据抽取。

当指定多个本地文件,TxtFileReader支持使用多线程进行数据抽取。线程并发数通过通道数指定。

当指定通配符,TxtFileReader尝试遍历出多个文件信息。例如: 指定/*代表读取/目录下所有的文件,指定/bazhen/*代表读取bazhen目录下游所有的文件。TxtFileReader目前只支持*作为文件通配符。

特别需要注意的是,DataX会将一个作业下同步的所有Text File视作同一张数据表。用户必须自己保证所有的File能够适配同一套schema信息。读取文件用户必须保证为类CSV格式,并且提供给DataX权限可读。

特别需要注意的是,如果Path指定的路径下没有符合匹配的文件抽取,DataX将报错。

必选:

默认值:

l column

描述:读取字段列表,type指定源数据的类型,index指定当前列来自于文本第几列(以0开始),value指定当前类型为常量,不从源头文件读取数据,而是根据value值自动生成对应的列。

默认情况下,用户可以全部按照String类型读取数据,配置如下:

 "column": ["*"]

用户可以指定Column字段信息,配置如下:

{

   "type": "long",

   "index": 0    //从本地文件文本第一列获取int字段

},

{

   "type": "string",

   "value": "alibaba"  //从TxtFileReader内部生成alibaba的字符串字段作为当前字段

}

对于用户指定Column信息,type必须填写,index/value必须选择其一。

必选:

默认值:全部按照string类型读取

l fieldDelimiter

描述:读取的字段分隔符

必选:是

默认值:,

l compress

描述:文本压缩类型,默认不填写意味着没有压缩。支持压缩类型为zip、gzip、bzip2。

必选:否

默认值:没有压缩

l encoding

描述:读取文件的编码配置。

必选:否

默认值:utf-8

l skipHeader

描述:类CSV格式文件可能存在表头为标题情况,需要跳过。默认不跳过。

必选:否

默认值:false

l nullFormat

描述:文本文件中无法使用标准字符串定义null(空指针),DataX提供nullFormat定义哪些字符串可以表示为null。

例如如果用户配置: nullFormat:"\N",那么如果源头数据是"\N",DataX视作null字段。

必选:否

默认值:\N

l csvReaderConfig

描述:读取CSV类型文件参数配置,Map类型。读取CSV类型文件使用的CsvReader进行读取,会有很多配置,不配置则使用默认值。

必选:否

默认值:无

常见配置:

"csvReaderConfig":{

       "safetySwitch": false,

       "skipEmptyRecords": false,

       "useTextQualifier": false

}

所有配置项及默认值,配置时 csvReaderConfig 的map中请严格按照以下字段名字进行配置:

boolean caseSensitive = true;

char textQualifier = 34;

boolean trimWhitespace = true;

boolean useTextQualifier = true;//是否使用csv转义字符

char delimiter = 44;//分隔符

char recordDelimiter = 0;

char comment = 35;

boolean useComments = false;

int escapeMode = 1;

boolean safetySwitch = true;//单列长度是否限制100000字符

boolean skipEmptyRecords = true;//是否跳过空行

boolean captureRawRecord = true;

 

以上内容来源于:

https://github.com/alibaba/DataX/blob/master/txtfilereader/doc/txtfilereader.md

 

支持总结

CSV文件作为一个二维表格式的纯文本文件,要导入到数据库中,需要映射成一张二维表。所以,这里的一些参数要对CSV文件的格式进行定义后才能导入。

1-CSV文件中不确定的属性,字符编码、换行符。因为不同操作系统和不同国家地区使用的字符集的不同,导入前需要定义这两个属性。

2-超越CSV的定义,字段分隔符。默认是逗号,但是可以是其他符号,我最常用的还是“|”。

3-导入相关的数据映射属性。是否跳过首行,很多CSV文件首行是字段名(string),导入的时候与目标端数据类型不一致(number)。

4-导入文本相关的CSV的属性,csvReaderConfig属性,例如转义字符。

5-与CSV导入表格相关的属性,需要定义CSV中每一列的数据类型,需要确定文本是否经过压缩,多个文本导入的路径这些。

整体来看对CSV的支持目前足以满足对数据集成的需求,可以支撑任何CSV数据的导入。所以,这部分功能对CSV的支持是强调且完整的。

5-参考:

1-关于RFC的参考

(1)百度百科RFC

https://baike.baidu.com/item/RFC/1840?fr=ge_ala

Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件。RFC文件是由Internet Society(ISOC)赞助发行。基本的互联网通信协议都有在RFC文件内详细说明。RFC文件还额外加入许多在标准内的论题,例如对于互联网新开发的协议及发展中所有的记录。因此几乎所有的互联网标准都有收录在RFC文件之中。

(2)百度百科ISOC

https://baike.baidu.com/item/ISOC/1247005?fromModule=lemma_inlink

国际互联网协会(Internet Society,简称ISOC)正式成立于1992年1月,是一个全球性的互联网组织,在推动互联网全球化,加快网络互连技术、发展应用软件、提高互联网普及率等方面发挥重要的作用。

(3)百度百科MIME

https://baike.baidu.com/item/MIME/2900607?fr=ge_ala

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

(3)RFC文档阅读

RFC 系列文档和 RFC 编辑器的相关说明

https://developer.aliyun.com/article/1174238

如何阅读RFC

https://blog.csdn.net/basil1728/article/details/105338445/

https://blog.csdn.net/alading2009/article/details/84187898

https://www.freebuf.com/column/184598.html

javaCSVFormat.RFC4180文件解析

https://blog.51cto.com/u_16175443/6825450

2-关于CSV的标准

Common Format and MIME Type for Comma-Separated Values (CSV) Files

https://www.rfc-editor.org/rfc/rfc4180

URI Fragment Identifiers for the text/csv Media Type

https://www.rfc-editor.org/rfc/rfc7111

RFC Editor

https://www.rfc-editor.org

 

3-其他

(1)纯文本文档

https://baike.baidu.com/item/%E7%BA%AF%E6%96%87%E6%9C%AC%E6%96%87%E6%A1%A3/5609235?fr=ge_ala

纯文本文档,就是没有任何文本修饰的,没有任何粗体,下划线,斜体,图形,符号或特殊字符及特殊打印格式的文本,只保存文本,不保存其格式设置。将所有的分节符、分页符、新行字符转换为段落标记。

(2)CSV文件

https://blog.51cto.com/u_12935/6862687

CSV格式是分隔的数据格式,有字段/列分隔的逗号字符和记录/行分隔换行符。字段包含特殊字符(逗号,换行符,或双引号),必须以双引号括住。行内包含一个项目是空字符串,可以以双引号括住。字段的值包含双引号时,要双写这个双引号(就像把一个双引号当做转义符一样)。CSV文件格式并不需要特定的字符编码,字节顺序,或行终止格式。

(3)Excel支持的文件格式

https://support.microsoft.com/zh-cn/office/excel-%E6%94%AF%E6%8C%81%E7%9A%84%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F-0943ff2c-6014-4e8d-aaea-b83d51d46247

(4)datax帮助

https://github.com/alibaba/DataX

 

目录
相关文章
|
1月前
|
数据采集 DataWorks 数据管理
DataWorks不是Excel,它是一个数据集成和数据管理平台
【10月更文挑战第10天】随着大数据技术的发展,企业对数据处理的需求日益增长。阿里云推出的DataWorks是一款强大的数据集成和管理平台,提供从数据采集、清洗、加工到应用的一站式解决方案。本文通过电商平台案例,详细介绍了DataWorks的核心功能和优势,展示了如何高效处理大规模数据,帮助企业挖掘数据价值。
93 1
|
1月前
|
数据采集 SQL DataWorks
DataWorks不是Excel,它是一个数据集成和数据管理平台
【10月更文挑战第5天】本文通过一家电商平台的案例,详细介绍了阿里云DataWorks在数据处理全流程中的应用。从多源数据采集、清洗加工到分析可视化,DataWorks提供了强大的一站式解决方案,显著提升了数据分析效率和质量。通过具体SQL示例,展示了如何构建高效的数据处理流程,突显了DataWorks相较于传统工具如Excel的优势,为企业决策提供了有力支持。
90 3
|
3月前
|
数据采集 DataWorks 数据挖掘
提升数据分析效率:DataWorks在企业级数据治理中的应用
【8月更文第25天】本文将探讨阿里巴巴云的DataWorks平台如何通过建立统一的数据标准、规范以及实现数据质量监控和元数据管理来提高企业的数据分析效率。我们将通过具体的案例研究和技术实践来展示DataWorks如何简化数据处理流程,减少成本,并加速业务决策。
442 54
|
3月前
|
SQL 分布式计算 DataWorks
利用DataWorks构建高效数据管道
【8月更文第25天】本文将详细介绍如何使用阿里云 DataWorks 的数据集成服务来高效地收集、清洗、转换和加载数据。我们将通过实际的代码示例和最佳实践来展示如何快速构建 ETL 流程,并确保数据管道的稳定性和可靠性。
201 56
|
2月前
|
存储 分布式计算 DataWorks
dataworks数据集成
dataworks数据集成
111 1
|
2月前
|
机器学习/深度学习 DataWorks 数据挖掘
基于阿里云Hologres和DataWorks数据集成的方案
基于阿里云Hologres和DataWorks数据集成的方案
70 7
|
3月前
|
监控 数据安全/隐私保护 异构计算
借助PAI-EAS一键部署ChatGLM,并应用LangChain集成外部数据
【8月更文挑战第8天】借助PAI-EAS一键部署ChatGLM,并应用LangChain集成外部数据
96 1
|
3月前
|
Java 测试技术 容器
从零到英雄:Struts 2 最佳实践——你的Web应用开发超级变身指南!
【8月更文挑战第31天】《Struts 2 最佳实践:从设计到部署的全流程指南》深入介绍如何利用 Struts 2 框架从项目设计到部署的全流程。从初始化配置到采用 MVC 设计模式,再到性能优化与测试,本书详细讲解了如何构建高效、稳定的 Web 应用。通过最佳实践和代码示例,帮助读者掌握 Struts 2 的核心功能,并确保应用的安全性和可维护性。无论是在项目初期还是后期运维,本书都是不可或缺的参考指南。
50 0
|
3月前
|
SQL 存储 数据管理
掌握SQL Server Integration Services (SSIS)精髓:从零开始构建自动化数据提取、转换与加载(ETL)流程,实现高效数据迁移与集成——轻松上手SSIS打造企业级数据管理利器
【8月更文挑战第31天】SQL Server Integration Services (SSIS) 是 Microsoft 提供的企业级数据集成平台,用于高效完成数据提取、转换和加载(ETL)任务。本文通过简单示例介绍 SSIS 的基本使用方法,包括创建数据包、配置数据源与目标以及自动化执行流程。首先确保安装了 SQL Server Data Tools (SSDT),然后在 Visual Studio 中创建新的 SSIS 项目,通过添加控制流和数据流组件,实现从 CSV 文件到 SQL Server 数据库的数据迁移。
184 0
|
3月前
|
数据采集 JSON DataWorks
DataWorks产品使用合集之支持哪些数据引擎
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。

相关产品

  • 大数据开发治理平台 DataWorks