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

简介: 数据集成的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

目录
相关文章
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
1112 2
|
SQL Java 关系型数据库
Dataphin功能Tips系列(53)-离线集成任务如何合理配置JVM资源
本文探讨了将MySQL数据同步至Hive时出现OOM问题的解决方案。
475 5
|
JSON JavaScript API
MCP 实战:用配置与真实代码玩转 GitHub 集成
MCP 实战:用配置与真实代码玩转 GitHub 集成
2946 4
|
缓存 前端开发 API
(网页系统集成CAD功能)在线CAD中配置属性的使用教程
本文介绍了Mxcad SDK在线预览和编辑CAD图纸的功能及配置方法。通过Vite、CDN或Webpack实现集成,用户可自定义设置以满足项目需求。主要内容包括:1)`createMxCad()`方法的初始属性配置,如画布ID、WASM文件路径、字体加载路径等;2)`MxFun.setIniset()`方法提供的更多CAD初始配置;3)`McObject`对象API用于动态调整视图背景色、浏览模式等。此外,还提供了在线Demo(https://demo2.mxdraw3d.com:3000/mxcad/)供用户测试实时效果。
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
1997 0
|
缓存 Java 应用服务中间件
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——依赖导入和Thymeleaf相关配置
在Spring Boot中使用Thymeleaf模板,需引入依赖`spring-boot-starter-thymeleaf`,并在HTML页面标签中声明`xmlns:th="http://www.thymeleaf.org"`。此外,Thymeleaf默认开启页面缓存,开发时建议关闭缓存以实时查看更新效果,配置方式为`spring.thymeleaf.cache: false`。这可避免因缓存导致页面未及时刷新的问题。
561 0
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
1415 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
5134 14
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
安装Git、配置用户信息、生成SSH密钥以及在Gitee上创建项目仓库等。
483 0
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
487 1