DataX将HDFS数据迁移到Mysql中NULL值的处理

出现该问题的原因,再hive中,null的存储时为"\N",Mysql的null值就是null,所以再进行数据迁移的时候需要考虑该问题

方法一:

方法一采用修改源码:
DataX将HDFS数据迁移到Mysql中NULL值的处理_第1张图片
具体实现代码块:

// 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"
			}
		}
	}
}

你可能感兴趣的:(DataX,mysql,hive)