首批通过分布式安全可靠测评,为关键业务系统打造
DataX 时间类型数据导入失败
更新时间:2026-05-29 09:46
本文介绍使用 DataX 向 OceanBase 数据库导入 DATE 类型的数据时发生错误的处理方法。
适用版本
OceanBase 数据库 V3.x 及之前版本
问题现象
通过 DataX 向 OceanBase 数据库导入数据失败,错误信息如下。
2020-07-16 10:53:38.860 [0-0-0-reader] ERROR StdoutPluginCollector - 脏数据:
{"message":"类型转换错误, 无法将[2018/9/30 16:22:02:032000] 转换为[DATE]","record":[],"type":"reader"}
2020-07-16 10:53:38.861 [0-0-0-reader] ERROR StdoutPluginCollector - 脏数据:
{"message":"类型转换错误, 无法将[2018/12/21 17:59:17:680000] 转换为[DATE]","record":[],"type":"reader"}
2020-07-16 10:53:38.861 [0-0-0-reader] INFO TxtFileReader$Task - end read source files...
DataX 的配置文件如下所示。
{
"job":{
"content":[
{
"reader":{
"name":"txtfilereader",
"parameter":{
"column":[
{
"index":"0",
"type":"date"
}
],
"?encoding":"must to set",
"encoding":"utf-8",
"fieldDelimiter":"|",
"path":[
"/Users/qiyibaba/Opensource/datax/targetv01/datax/datax/a.csv"
]
}
},
"writer":{
"name":"mysqlwriter",
"parameter":{
"column":[
"a"
],
"connection":[
{
"jdbcUrl":"jdbc:mysql://127.x.x.1:3306/test",
"table":[
"ttime"
]
}
],
"password":"root",
"preSql":[
],
"session":[
],
"username":"root",
"writeMode":"replace"
}
}
}
],
"setting":{
"speed":{
"channel":"1"
}
}
}
}
问题原因
根据错误信息,该问题可能是在使用 DataX 向 OceanBase 数据库导入 DATE 类型的数据时,数据类型转换发生错误。
目前,DataX 导入 DATE 类型的数据时,仅支持精确到秒。
解决方法
有两种方式解决该问题:
修改原始数据,去除 DATE 类型的小数位。
若要保留小数位,可以将数据转换为 string 类型,并且添加代码段将非标时间格式改成标准时间格式。
将代码段添加在
content属性中,与reader和writer平级。... "transformer": [ { "name": "dx_groovy", "parameter": { "code": "String newValue0 = record.getColumn(0).asString().replace(\"/\",\"-\");int len = newValue0.length();record.setColumn(0, new StringColumn(newValue0.substring(0,len - 7) + \".\" + newValue0.substring(len -6)));return record;", "extraPackage": [] } } ] ...