出现该问题的原因,再hive中,null的存储时为"\N",Mysql的null值就是null,所以再进行数据迁移的时候需要考虑该问题
方法一:
方法一采用修改源码:
具体实现代码块:
// it's all ok if nullFormat is null
// 解决datax抽hdfs数据到mysql之null值变成 \N 或者 转换错误 的问题
if (columnValue.equals(nullFormat) || columnValue.equals("\\N") ) {
//LOG.info("********** string的 原始值 为 "+columnValue+" ******");
columnValue = null;
}
此方法比较麻烦,且不一定能成功,建议采用方法二。
方法二:
方法二采用的是修改json配置文件
"nullFormat": "\\N",
具体格式:
{
"job": {
"content": [
{
"reader": {
"name": "hdfsreader",
"parameter": {
"column": [
"*"
],
"nullFormat": "\\N",
"defaultFS": "hdfs://mybigdata",
"encoding": "UTF-8",
"fieldDelimiter": "\t",
"fileType": "text",
"path": "/hive/ads/xxx/*",
"hadoopConfig": {
...
}
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"column": [
"dt",
"company_name",
"channel_name",
"credit_amt",
"update_time"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://xxxx:3306/test?useUnicode=true&characterEncoding=utf-8",
"table": [
"test"
]
}
],
"password": "123456",
"username": "root",
"writeMode": "replace"
}
}
}
],
"setting": {
"speed": {
"channel": "1"
}
}
}
}