DataX数据迁移分隔符问题 DataX中有脏数据

在Hive的ODS层建表语句中,我以“,”为分隔符;

fields terminated by ','

在DataX的json文件中,我也以“,”为分隔符。

"fieldDelimiter": ","

但是运行DataX脚本文件进行迁移时,会出现如下错误

经DataX智能分析,该任务最可能的错误原因是:
com.alibaba.datax.common.exception.DataXException: Code:[Framework-14], 
Description:[DataX传输脏数据超过用户预期,
该错误通常是由于源端数据存在较多业务脏数据导致,
请仔细检查DataX汇报的脏数据日志信息, 或者您可以适当调大脏数据阈值 .]
.  - 脏数据条数检查不通过,限制是[0]条,但实际上捕获了[25]条.

经过分析,原因是在使用df.write.mode("overwrite").saveAsTable("table_name")将DataFrame保存为表时,并不会使用分隔符来分隔数据。这是因为在Spark中,表数据是以列式存储的,而不是以行式存储。当使用saveAsTable方法将DataFrame保存为表时,数据会被序列化为一种列式存储的格式(例如Parquet、ORC等),并且与表的元数据一起存储在指定的位置。这就使得DataX脚本在运行过程中,不能以“,”为分隔符进行分隔,出现脏数据。

将原代码修改为保存表时将分隔符指定为“\t”,序列化格式为“\t”,DataX的json文件中也以“\t”为分隔符,即可解决问题,成功迁移。

    df.write.format("Hive")
      .mode("overwrite")
      .option("delimiter", "\t")
      .option("serialization.format", "\t")
      .saveAsTable("table_name")
DataX的json文件中的分隔符:
"fieldDelimiter": "\t"

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
DataX抽取Oracle数据时,如果字段中存在分隔符,可以采取以下解决方案。首先,可以修改建表分隔符,使用alter table语句将建表分隔符修改为与导入时的分隔符一致。例如,可以使用以下语句修改建表分隔符: ``` alter table table_name set serdeproperties('field.delim'='\t'); ``` 另外,也可以在建表时直接指定好分隔符,使用create table语句创建表时,通过row format delimited fields terminated by语句指定字段的分隔符。例如: ``` create table table_name( column1 datatype, column2 datatype ) row format delimited fields terminated by '\t'; ``` 此外,还需要注意分区表和无分区表的区别。对于分区表,需要在建表语句中添加partitioned by语句指定分区字段。 另外,如果目标表的存储格式为textfile,默认的列分隔符为\001,默认的行分隔符为\n。如果在Oracle源数据存在\n作为行分隔符,会导致字段错位和数据量增加。为了解决这个问题,可以将源数据中的\n替换为其他字符,或者在导入时指定行分隔符为其他字符。 最后,如果需要在DataX中指定筛选条件,可以使用MysqlReader,并根据指定的column、table和where条件拼接SQL进行数据抽取。在实际业务场景中,通常会选择同步当天的数据,可以将where条件指定为gmt_create > $bizdate。需要注意的是,不可以将where条件指定为limit 10,因为limit不是SQL的合法where子句。 综上所述,可以通过修改建表分隔符、指定分隔符、替换行分隔符以及指定筛选条件等方式解决DataX抽取Oracle数据字段中存在分隔符问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值