数据集成模块中如何配置FTP数据同步

本文涉及的产品
智能数据建设与治理Dataphin,200数据处理单元
简介: 数据集成的FTP输入组件提供了读取FTP数据的能力。本文重点介绍如何配置FTP输入组件。

作者:终古


1 组件说明

读取远程FTP文件系统数据。通过FTPFTPS或者SFTP协议连接远程FTP文件系统,创建远程文件输入流进行数据拉取。

2 原理说明

远程FTP文件本身是无结构化数据存储,扫描远程FTP目录下的所有文件获取待读取的文件列表,根据不同的文件类型使用不同的读取方式,目前支持功能如下:

  • 支持标准csv文件和纯文本文件
  • 支持多种类型数据读取(使用String表示),支持列裁剪
  • 支持递归读取、支持文件名过滤。
  • 支持文本压缩,现有压缩格式为zip、gzip、bzip2。
  • 多个File可以支持并发读取。


读取文件方式有两种,一种是textReader,一种是csvReader


  • textReader

一种基于文件流的解析器,它的解析很简单,直接读取文件的每一行,然后使用配置的分隔符进行切分。它在切分过程支持几个特性(配置项):

  • skipEmptyRecords 是否跳过空行
  • trimWhitespace 是否去除每列内容的前后空白符
  • useTextQualifier 是否使用限定符
  • textQualifier 配置限定符,读取后会去除限定符
  • caseSensitive 限定符是否区分大小写
  • 使用场景
  • 列内容是json的典型场景


  • csvReader

一种开源的基于字符流的解析器,用于解析使用单字符分隔符分隔的字符流。因为是基于流的解析器,因此就存在很多规则,也就要求文件内容必须符合它的规则,否则会导致解析失败或者解析错误。但对于大部分普通的数据文件(即每列内容比较简单的文件,比如数字、日期以及没有特殊字符(与限定符冲突的字符,例如双引号"")的字符串),csvReader是比textReader性能快的,而且它支持指定行风格符。它在切分过程支持的几个特性:

  • skipEmptyRecords 是否跳过空行
  • trimWhitespace 是否去除每列内容的前后空白符
  • useTextQualifier 是否使用限定符,默认使用
  • textQualifier 配置限定符,读取后会去除限定符,但是要求限定符必须成对出现,如果只出现一个,那一定会导致读取错误,因此在文件中,若某列字符串存在不确定的限定符(默认双引号),则不能使用csvReader模式,请使用textReader
  • caseSensitive 限定符是否区分大小写
  • recordDelimiter 行分隔符
  • escapeMode 转义字符模式,一版都是推荐配置2,使用单斜杠表示转义
  • 2: Use a backslash character before the text qualifier to represent an occurance of the text qualifier
  • 1: Double up the text qualifier to represent an occurance of the text qualifier
  • 使用场景:除了必须使用textReader的场景之外


那么,对于这两种读取方式,该如何配置来选择某种读取方式呢?在Dataphin的V297版本,我们新增了一个高级配置:

我们倾向于优先使用csvReader,因此只有如下配置时才会使用textReader,否则使用csvReader,即:

  • 选择文件类型Text,且分隔符是多字符分隔符

1.png

  • 选择文件类型Text,且配置了高级配置,且是textReaderConfig(不要求配置子项,配置一个空的textReaderConfig也可以,子项是根据自己的数据特征来配置的)

2.png

3 配置说明

  • path
  • 描述:远程FTP文件系统的路径信息,注意这里可以支持填写多个路径。

当指定单个远程FTP文件,FtpReader暂时只能使用单线程进行数据抽取。

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

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

  • 必选:是
  • 默认值:无
  • column
  • 描述:读取字段列表,JSON对象数组
{
 "index":0,// 该字段在文件中的第几列,基于0
  "name":"字段名称",
  "type":"Long/Double/String/Date/Boolean/Bytes"
}


  • fieldDelimiter
  • 描述:读取的字段分隔符
  • 必选:是
  • 默认值:,
  • compress
  • 描述:文本压缩类型,支持压缩类型为gzip、bzip2、zip等。
  • 必选:否
  • 默认值:没有压缩
  • encoding
  • 描述:读取文件的编码配置。
  • 必选:否
  • 默认值:utf-8
  • fileFormat
  • 描述:读取文件的格式,目前仅支持:csv/text
  • 必选:是
  • 默认值:无
  • skipHeader
  • 描述:类CSV格式和EXCEL文件可能存在表头为标题情况,需要跳过。默认不跳过,压缩文件模式下不支持skipHeader。
  • 必选:否
  • 默认值:false
  • nullFormat
  • 描述:文本文件中无法使用标准字符串定义null(空指针),DataX提供nullFormat定义哪些字符串可以表示为null。例如如果用户配置: nullFormat:"\N",那么如果源头数据是"\N",将视作null字段。
  • 必选:否
  • 默认值:\N
  • csvReaderConfig
  • 描述:用于控制csv文件的读取
{
    "recordDelimiter":"\u0000",// 配置行分格符,当文件内容不是以换行符换行时开启
    "safetySwitch":false,// 是否限制行记录不大于10万字节
    "skipEmptyRecords":true,//是否跳过空行,如果不跳过,则会产生一行每列都是空的记录
    "trimWhitespace":true,// 是否去除每列前后的空白符
    "useTextQualifier":true,//是否使用限定符,如果开启,默认双引号,则两个双引号内的任意内容视为一列,不管是否存在列分隔符
    "textQualifier":"\"",// 配置限定符
    "caseSensitive":true// 限定符是否区分大小写
}


  • 必选:否
  • 默认值:无
  • textReaderConfig
  • 描述:用于控制text文件的读取
{
  "useTextQualifier":false,// 是否存在限定符
  "textQualifier":"\"",
  "caseSensitive":true,//限定符是否区分大小写
  "trimWhitespace":false//是否去除每列内容前后的空白符
}
  • 必选:否
  • 默认值:无

4 字段类型映射

使用数据集成支持的数据类型

数据集成 内部类型

Long

Double

String

Date

Boolean

Bytes

5 特别注意

5.1 读取数据一致性约束

  • 任务在执行开始时扫描待读取的文件,任务执行期间将不再实时扫描是否由新增文件
  • 如果在任务执行期间,扫描到的文件被删除则会报错

5.2 数据库编码

支持指定编码读取ftp文件,确保与写入时的编码一致,否则会乱码

6 最佳实践

csvReader

  1. 准备数据

3.png

可以看下数据特征:

  • 第一行第二列两边存在双引号,要求去掉双引号
  • 第二行第二列前面有空白符,要求去掉
  1. 使用csvReader加上高级配置即可:

4.png144.png

注意:csvReaderConfig默认useTextQualifier为true,textQualifier为双引号",trimWhitespace为true因此可以不配置,因此上面两个配置效果等价。


  1. 预览结果

5.png

第一列第二行双引号已去除,第二行第二列前面空白符去除。

textReader

  1. 准备数据

6.png

查看数据特征:

  • 第一行第二列是个json字符串,要求能正常读取
  • 第二行第二列前面有空格,要求去掉,
  • 列分隔符是@,注意,对于文本数据,列内容不能存在与列分隔符相同的字符。
  1. 使用textReader

7.png

  1. 数据预览

8.png

可以看到,符合预期。

PS:如果你的json数据中不存在与列分隔符相同的字符,那一般情况下,也是可以直接使用csvReader的

textReader & csvReader

  1. 准备数据

9.png

数据特征:

  1. 第一行第二列存在单个双引号,是数据内容,需要保留,由于csvReader默认的限定符是双引号,所以默认情况下,使用csvReader一定会报错。
  2. 第二行第二列前面存在空白符
  3. 使用textReader

10.png

  1. csvReader

对于这种情况,说明列内容可能会存在不确定的其他字符,可能会与默认的限定符冲突,因此需要关闭csvReader的限定符开关。

11.png

  1. 数据预览

12.png

目录
相关文章
|
3月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
4月前
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
120 3
|
3月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
70 1
|
3月前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
【8月更文挑战第30天】在Jenkins服务器中,git和Gitee是常用的代码拉取终端。Git作为分布式版本控制系统,具备出色的灵活性和可扩展性;而Gitee则在国内网络环境下表现更佳,适合团队协作。Git配置包括安装、设置用户信息及生成SSH密钥等步骤;Gitee配置也类似,需注册账号、创建仓库、配置基本信息并设置远程仓库地址。开发人员提交代码后,可通过Webhook、定时轮询或事件监听等方式触发Jenkins动作,确保持续集成和部署高效运行。正确配置这些触发机制并通过测试验证其有效性至关重要。
64 2
|
3月前
|
关系型数据库 MySQL 大数据
DataX:数据同步的超音速英雄!阿里开源工具带你飞越数据传输的银河系,告别等待和故障的恐惧!快来见证这一数据工程的奇迹!
【8月更文挑战第13天】DataX是由阿里巴巴开源的一款专为大规模数据同步设计的工具,在数据工程领域展现强大竞争力。它采用插件化架构,支持多种数据源间的高效迁移。相较于Apache Sqoop和Flume,DataX通过并发写入和流处理实现了高性能同步,并简化了配置流程。DataX还支持故障恢复,能够在同步中断后继续执行,节省时间和资源。这些特性使其成为构建高效可靠数据同步方案的理想选择。
240 2
|
4月前
|
存储 开发框架 前端开发
基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传
基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传
|
2月前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
安装Git、配置用户信息、生成SSH密钥以及在Gitee上创建项目仓库等。
73 0
|
3月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
70 0
|
4月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
266 6
|
3月前
【Azure Function】Function App和Powershell 集成问题, 如何安装PowerShell的依赖模块
【Azure Function】Function App和Powershell 集成问题, 如何安装PowerShell的依赖模块