文章目录

  • 一. 快速介绍
  • 二. 功能与限制
  • 三. 功能说明
    • 3.1 配置样例
    • 3.2 参数说明
      • 3.2.1 path
      • 3.2.2 fileName
      • 3.2.3 writeMode
      • 3.2.4 fieldDelimiter
      • 3.2.5 compress
      • 3.2.6 encoding
      • 3.2.7 nullFormat
      • 3.2.8 dateFormat
      • 3.2.9 fileFormat
      • 3.2.10 header
      • 3.3 类型转换
  • 四. 测试案例
    • 4.1 数据准备
    • 4.2 json文件准备
    • 4.3 运行脚本
  • 参考:

一. 快速介绍

  实际生产中,鉴于数据安全、不同够公司数据交互等原因,很多时候会使用txt、csv等文件格式来交互数据。

  TxtFileWriter提供了向本地文件写入类CSV格式的一个或者多个表文件。TxtFileWriter服务的用户主要在于DataX开发、测试同学。

  写入本地文件内容存放的是一张逻辑意义上的二维表,例如CSV格式的文本信息。

二. 功能与限制

  TxtFileWriter实现了从DataX协议转为本地TXT文件功能,本地文件本身是无结构化数据存储。

TxtFileWriter如下几个方面约定:

  1. 支持且仅支持写入 TXT的文件,且要求TXT中shema为一张二维表。

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

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

  4. 支持多线程写入,每个线程写入不同子文件。

  5. 文件支持滚动,当文件大于某个size值或者行数值,文件需要切换。 [暂不支持]

我们不能做到:

  1. 单个文件不能支持并发写入。

三. 功能说明

3.1 配置样例

{"setting": {},"job": {"setting": {"speed": {"channel": 2}},"content": [{"reader": {"name": "txtfilereader","parameter": {"path": ["/home/haiwei.luo/case00/data"],"encoding": "UTF-8","column": [{"index": 0,"type": "long"},{"index": 1,"type": "boolean"},{"index": 2,"type": "double"},{"index": 3,"type": "string"},{"index": 4,"type": "date","format": "yyyy.MM.dd"}],"fieldDelimiter": ","}},"writer": {"name": "txtfilewriter","parameter": {"path": "/home/haiwei.luo/case00/result","fileName": "luohw","writeMode": "truncate","dateFormat": "yyyy-MM-dd"}}}]}
}

3.2 参数说明

3.2.1 path

  • 描述:本地文件系统的路径信息,TxtFileWriter会写入Path目录下属多个文件。

  • 必选:是

  • 默认值:无

3.2.2 fileName

  • 描述:TxtFileWriter写入的文件名,该文件名会添加随机的后缀作为每个线程写入实际文件名。

  • 必选:是

  • 默认值:无

3.2.3 writeMode

  • 描述:TxtFileWriter写入前数据清理处理模式:
  1. truncate,写入前清理目录下一fileName前缀的所有文件。
  2. append,写入前不做任何处理,DataX TxtFileWriter直接使用filename写入,并保证文件名不冲突。
  3. nonConflict,如果目录下有fileName前缀的文件,直接报错。
  • 必选:是

  • 默认值:无

3.2.4 fieldDelimiter

  • 描述:读取的字段分隔符

  • 必选:否

  • 默认值:,

3.2.5 compress

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

  • 必选:否

  • 默认值:无压缩

3.2.6 encoding

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

  • 必选:否

  • 默认值:utf-8

3.2.7 nullFormat

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

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

  • 必选:否

  • 默认值:\N

3.2.8 dateFormat

  • 描述:日期类型的数据序列化到文件中时的格式,例如 “dateFormat”: “yyyy-MM-dd”。

  • 必选:否

  • 默认值:无

3.2.9 fileFormat

  • 描述:文件写出的格式,包括csv (http://zh.wikipedia.org/wiki/%E9%80%97%E5%8F%B7%E5%88%86%E9%9A%94%E5%80%BC) 和text两种,csv是严格的csv格式,如果待写数据包括列分隔符,则会按照csv的转义语法转义,转义符号为双引号";text格式是用列分隔符简单分割待写数据,对于待写数据包括列分隔符情况下不做转义。

  • 必选:否

  • 默认值:text

3.2.10 header

  • 描述:txt写出时的表头,示例[‘id’, ‘name’, ‘age’]。

  • 必选:否

  • 默认值:无

3.3 类型转换

本地文件本身不提供数据类型,该类型是DataX TxtFileWriter定义:

其中:

  1. 本地文件 Long是指本地文件文本中使用整形的字符串表示形式,例如"19901219"。
  2. 本地文件 Double是指本地文件文本中使用Double的字符串表示形式,例如"3.1415"。
  3. 本地文件 Boolean是指本地文件文本中使用Boolean的字符串表示形式,例如"true"、“false”。不区分大小写。
  4. 本地文件 Date是指本地文件文本中使用Date的字符串表示形式,例如"2014-12-31",Date可以指定format格式。

四. 测试案例

  现在我们来测试一个从csv读取,然后再写入csv的案例.

4.1 数据准备

参考之前Superset的测试数据:
测试数据

将mysql表数据写入csv文件:

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql>
mysql> select * from  fact_sale INTO OUTFILE '/home/backup/fact_sale.csv' FIELDS TERMINATED BY ',';
Query OK, 684371 rows affected (0.69 sec)mysql>

查看csv文件格式:

将文件传到DataX所在的服务器:

4.2 json文件准备

txtfilereader:

{"setting": {},"job": {"setting": {"speed": {"channel": 2}},"content": [{"reader": {"name": "txtfilereader","parameter": {"path": ["/home/backup"],"encoding": "UTF-8","column": [{"index": 0,"type": "date","format": "yyyy-MM-dd"},{"index": 1,"type": "string"},{"index": 2,"type": "string"},{"index": 3,"type": "long"},{"index": 4,"type": "long"}],"fieldDelimiter": ","}},"writer": {"name": "txtfilewriter","parameter": {"path": "/home/backup","fileName": "fact_sale_new","writeMode": "truncate","format": "yyyy-MM-dd"}}}]}
}

4.3 运行脚本

cd $datax_home/bin
python datax.py ./txtfilereader.json

运行日志:

[root@10-31-1-119 bin]# python datax.py ./txtfilereader.json DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.2021-11-23 11:16:33.256 [main] INFO  VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl
2021-11-23 11:16:33.263 [main] INFO  Engine - the machine info  => osInfo: Oracle Corporation 1.8 25.242-b08jvmInfo:        Linux amd64 3.10.0-1127.el7.x86_64cpu num:        8totalPhysicalMemory:    -0.00GfreePhysicalMemory:     -0.00GmaxFileDescriptorCount: -1currentOpenFileDescriptorCount: -1GC Names        [PS MarkSweep, PS Scavenge]MEMORY_NAME                    | allocation_size                | init_size                      PS Eden Space                  | 256.00MB                       | 256.00MB                       Code Cache                     | 240.00MB                       | 2.44MB                         Compressed Class Space         | 1,024.00MB                     | 0.00MB                         PS Survivor Space              | 42.50MB                        | 42.50MB                        PS Old Gen                     | 683.00MB                       | 683.00MB                       Metaspace                      | -0.00MB                        | 0.00MB                         2021-11-23 11:16:33.277 [main] INFO  Engine -
{"content":[{"reader":{"name":"txtfilereader","parameter":{"column":[{"format":"yyyy-MM-dd","index":0,"type":"date"},{"index":1,"type":"string"},{"index":2,"type":"string"},{"index":3,"type":"long"},{"index":4,"type":"long"}],"encoding":"UTF-8","fieldDelimiter":",","path":["/home/backup"]}},"writer":{"name":"txtfilewriter","parameter":{"fileName":"fact_sale_new","format":"yyyy-MM-dd","path":"/home/backup","writeMode":"truncate"}}}],"setting":{"speed":{"channel":2}}
}2021-11-23 11:16:33.291 [main] WARN  Engine - prioriy set to 0, because NumberFormatException, the value is: null
2021-11-23 11:16:33.295 [main] INFO  PerfTrace - PerfTrace traceId=job_-1, isEnable=false, priority=0
2021-11-23 11:16:33.295 [main] INFO  JobContainer - DataX jobContainer starts job.
2021-11-23 11:16:33.299 [main] INFO  JobContainer - Set jobId = 0
2021-11-23 11:16:33.319 [job-0] WARN  TxtFileWriter$Job - 您使用format配置日期格式化, 这是不推荐的行为, 请优先使用dateFormat配置项, 两项同时存在则使用dateFormat.
2021-11-23 11:16:33.339 [job-0] WARN  UnstructuredStorageWriterUtil - 您的encoding配置为空, 将使用默认值[UTF-8]
2021-11-23 11:16:33.340 [job-0] WARN  UnstructuredStorageWriterUtil - 您没有配置列分隔符, 使用默认值[,]
2021-11-23 11:16:33.340 [job-0] INFO  JobContainer - jobContainer starts to do prepare ...
2021-11-23 11:16:33.341 [job-0] INFO  JobContainer - DataX Reader.Job [txtfilereader] do prepare work .
2021-11-23 11:16:33.343 [job-0] INFO  TxtFileReader$Job - add file [/home/backup/fact_sale.csv] as a candidate to be read.
2021-11-23 11:16:33.344 [job-0] INFO  TxtFileReader$Job - 您即将读取的文件数为: [1]
2021-11-23 11:16:33.345 [job-0] INFO  JobContainer - DataX Writer.Job [txtfilewriter] do prepare work .
2021-11-23 11:16:33.345 [job-0] INFO  TxtFileWriter$Job - 由于您配置了writeMode truncate, 开始清理 [/home/backup] 下面以 [fact_sale_new] 开头的内容
2021-11-23 11:16:33.348 [job-0] INFO  JobContainer - jobContainer starts to do split ...
2021-11-23 11:16:33.349 [job-0] INFO  JobContainer - Job set Channel-Number to 2 channels.
2021-11-23 11:16:33.351 [job-0] INFO  JobContainer - DataX Reader.Job [txtfilereader] splits to [1] tasks.
2021-11-23 11:16:33.351 [job-0] INFO  TxtFileWriter$Job - begin do split...
2021-11-23 11:16:33.365 [job-0] INFO  TxtFileWriter$Job - splited write file name:[fact_sale_new__7b975784_087a_4270_94a4_11d55d290a68]
2021-11-23 11:16:33.365 [job-0] INFO  TxtFileWriter$Job - end do split.
2021-11-23 11:16:33.365 [job-0] INFO  JobContainer - DataX Writer.Job [txtfilewriter] splits to [1] tasks.
2021-11-23 11:16:33.387 [job-0] INFO  JobContainer - jobContainer starts to do schedule ...
2021-11-23 11:16:33.390 [job-0] INFO  JobContainer - Scheduler starts [1] taskGroups.
2021-11-23 11:16:33.391 [job-0] INFO  JobContainer - Running by standalone Mode.
2021-11-23 11:16:33.399 [taskGroup-0] INFO  TaskGroupContainer - taskGroupId=[0] start [1] channels for [1] tasks.
2021-11-23 11:16:33.407 [taskGroup-0] INFO  Channel - Channel set byte_speed_limit to -1, No bps activated.
2021-11-23 11:16:33.407 [taskGroup-0] INFO  Channel - Channel set record_speed_limit to -1, No tps activated.
2021-11-23 11:16:33.416 [taskGroup-0] INFO  TaskGroupContainer - taskGroup[0] taskId[0] attemptCount[1] is started
2021-11-23 11:16:33.418 [0-0-0-writer] INFO  TxtFileWriter$Task - begin do write...
2021-11-23 11:16:33.418 [0-0-0-reader] INFO  TxtFileReader$Task - reading file : [/home/backup/fact_sale.csv]
2021-11-23 11:16:33.418 [0-0-0-writer] INFO  TxtFileWriter$Task - write to file : [/home/backup/fact_sale_new__7b975784_087a_4270_94a4_11d55d290a68]
2021-11-23 11:16:33.457 [0-0-0-reader] INFO  UnstructuredStorageReaderUtil - CsvReader使用默认值[{"captureRawRecord":true,"columnCount":0,"comment":"#","currentRecord":-1,"delimiter":",","escapeMode":1,"headerCount":0,"rawRecord":"","recordDelimiter":"\u0000","safetySwitch":false,"skipEmptyRecords":true,"textQualifier":"\"","trimWhitespace":true,"useComments":false,"useTextQualifier":true,"values":[]}],csvReaderConfig值为[null]
2021-11-23 11:16:35.753 [0-0-0-writer] INFO  TxtFileWriter$Task - end do write
2021-11-23 11:16:35.821 [taskGroup-0] INFO  TaskGroupContainer - taskGroup[0] taskId[0] is successed, used[2406]ms
2021-11-23 11:16:35.822 [taskGroup-0] INFO  TaskGroupContainer - taskGroup[0] completed it's tasks.
2021-11-23 11:16:43.415 [job-0] INFO  StandAloneJobContainerCommunicator - Total 684371 records, 16363343 bytes | Speed 1.56MB/s, 68437 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.652s |  All Task WaitReaderTime 0.076s | Percentage 100.00%
2021-11-23 11:16:43.415 [job-0] INFO  AbstractScheduler - Scheduler accomplished all tasks.
2021-11-23 11:16:43.416 [job-0] INFO  JobContainer - DataX Writer.Job [txtfilewriter] do post work.
2021-11-23 11:16:43.416 [job-0] INFO  JobContainer - DataX Reader.Job [txtfilereader] do post work.
2021-11-23 11:16:43.416 [job-0] INFO  JobContainer - DataX jobId [0] completed successfully.
2021-11-23 11:16:43.418 [job-0] INFO  HookInvoker - No hook invoked, because base dir not exists or is a file: /home/software/datax/hook
2021-11-23 11:16:43.420 [job-0] INFO  JobContainer - [total cpu info] => averageCpu                     | maxDeltaCpu                    | minDeltaCpu                    -1.00%                         | -1.00%                         | -1.00%[total gc info] => NAME                 | totalGCCount       | maxDeltaGCCount    | minDeltaGCCount    | totalGCTime        | maxDeltaGCTime     | minDeltaGCTime     PS MarkSweep         | 0                  | 0                  | 0                  | 0.000s             | 0.000s             | 0.000s             PS Scavenge          | 11                 | 11                 | 11                 | 0.067s             | 0.067s             | 0.067s             2021-11-23 11:16:43.420 [job-0] INFO  JobContainer - PerfTrace not enable!
2021-11-23 11:16:43.421 [job-0] INFO  StandAloneJobContainerCommunicator - Total 684371 records, 16363343 bytes | Speed 1.56MB/s, 68437 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.652s |  All Task WaitReaderTime 0.076s | Percentage 100.00%
2021-11-23 11:16:43.422 [job-0] INFO  JobContainer -
任务启动时刻                    : 2021-11-23 11:16:33
任务结束时刻                    : 2021-11-23 11:16:43
任务总计耗时                    :                 10s
任务平均流量                    :            1.56MB/s
记录写入速度                    :          68437rec/s
读出记录总数                    :              684371
读写失败总数                    :                   0[root@10-31-1-119 bin]#

写入的文件加了线程名为实际的文件名:

参考:

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

DataX系列4-TxtFileWriter介绍相关推荐

  1. SpringBoot 2.0 系列001 -- 入门介绍以及相关概念

    为什么80%的码农都做不了架构师?>>>    SpringBoot 2.0 系列001 -- 入门介绍以及相关概念 什么是SpringBoot? 项目地址:http://proje ...

  2. 提炼游戏引擎系列:开篇介绍

    前言 大家好!本系列记录了从炸弹人游戏中提炼2D游戏引擎YEngine2D雏形的实战过程,您可以通过本系列了解到引擎提炼的思想.引擎的设计以及引擎是如何从游戏中提炼的,学习引擎开发的知识.希望对您能有 ...

  3. WPF入门教程系列三——Application介绍(续)

    接上文WPF入门教程系列二--Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...

  4. WPF入门教程系列四——Dispatcher介绍

    WPF入门教程系列四--Dispatcher介绍 一.Dispatcher介绍 微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢? 不管是WinForm应用程序还 ...

  5. asp.net core 系列 19 EFCore介绍

    asp.net core 系列 19 EFCore介绍 原文:asp.net core 系列 19 EFCore介绍 一.概述 目前最新的EF Core版本是3.0,最稳定的EF Core版本是2.2 ...

  6. .NET 4 并行(多核)编程系列之一入门介绍

    .NET 4 并行(多核)编程系列之一入门介绍 本系列文章将会对.NET 4中的并行编程技术(也称之为多核编程技术)以及应用作全面的介绍. 本篇文章的议题如下:   1. 并行编程和多线程编程的区别. ...

  7. 大白话5分钟带你走进人工智能-第二十二节决策树系列之概念介绍(1)

                                                                第二十二节决策树系列之概念介绍(1) 本系列我们讲一个新算法及其衍生出来的系列算 ...

  8. TCP重点系列之sack介绍

    原文: TCP重点系列之sack介绍 | 凡是过去 皆为序曲https://allen-kevin.github.io/2017/03/01/TCP%E9%87%8D%E7%82%B9%E7%B3%B ...

  9. GD32系列总结 - systick介绍及使用

    GD32系列总结 - systick介绍及使用 写在前面 SysTick 什么是SysTick SysTick寄存器 CubeMX配置 代码示例 时钟初始化 写在前面 从本文开始,后面的基本都会基于S ...

最新文章

  1. pdb+ipdb 调试 Python代码
  2. 分布式系统事务一致性解决方案
  3. ubuntu19.04更改国内镜像源
  4. Disconf 学习系列之全网最详细的最新稳定Disconf 搭建部署(基于Windows7 / 8 / 10)(图文详解)...
  5. python重定向网页_【Python网页分析】httplib库的重定向处理
  6. Delphi SWF SDK v1.4 Crack Notes
  7. 石油化工设备维护检修规程_【干货】罗茨鼓风机维护检修规程
  8. iframe自动播放
  9. 从零开始搭建一个前端框架(一)环境准备并完成简单打包
  10. win10共享打印错误0x0000006_win7系统局域网无法共享惠普打印机提示0x000006be错误的解决方法...
  11. 【一文读懂】python 中的 numpy.reshape(a, newshape, order=‘C‘) 详细说明及实例讲解
  12. linux log4cxx 静态库,log4cxx的个人实践
  13. XSS 绕过思路 bypass 之日天日地日空气
  14. 鲁大师2023年Q3电脑排行:三足鼎立,PC圈一场旷日持久之战即将开启
  15. servlet中destory方法的误解
  16. 移动端键盘弹出后,导致背景图片上移解决方法(MUI)
  17. IT服务管理之能力管理
  18. ROC原理介绍及利用python实现二分类和多分类的ROC曲线
  19. 关于正交变换和正交矩阵
  20. C++字符函数库 cctype

热门文章

  1. 计算机维修活动,计算机协会维修活动策划书
  2. AUTOSAR软件架构简介
  3. c226打印机驱动安装_小白教您电脑怎么安装打印机驱动
  4. c语言引用类型,c语言 引用符号
  5. 已知两点坐标,求直线方程、距离其中一点距离为L的某点
  6. 微信公众平台注册所需资料(服务号和小程序一样)
  7. 简述 AST 抽象语法树
  8. usb_cam的ROS2甜点
  9. 潮汐护符服务器维护后,魔兽世界怀旧服潮汐护符怎么获得-魔兽世界怀旧服潮汐护符获得心得-pvp装备_牛游戏网...
  10. 算法训练第五十天 | 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV