DataX将MySQL数据同步到HDFS中时,空值不处理可以吗

DataX将MySQL数据同步到HDFS中时,空值存到HDFS中时,默认是存储为\N,这样会有两个缺点:

  1. 会产生歧义,如果MySQL业务数据中有\N数据,那么存储到HDFS上是\N,null值存储也是\N,当用Hive查询时,会用is null进行查询,那么会把真实的业务数据也查询为null,所以建议存储到HDFS上时,把null存储为''
  2. 将HDFS的数据再导入MySQL时,会把\N存储进去,数据就不对了

处理方案有2个:

  1. 不处理。那么datax会存储\N,hive会自动把\N查询为null。但是会产生歧义

  2. 修改源码。

    1. 修改DataX HDFS Writer的源码,增加自定义null值存储格式的逻辑,可参考记Datax3.0解决MySQL抽数到HDFSNULL变为空字符的问题_datax nullformat_谭正强的博客-CSDN博客。

    2. 在Hive中建表时指定null值存储格式为空字符串(''),例如:

    sql 复制代码
    DROP TABLE IF EXISTS base_province;
    CREATE EXTERNAL TABLE base_province
    (
        `id`         STRING COMMENT '编号',
        `name`       STRING COMMENT '省份名称',
        `region_id`  STRING COMMENT '地区ID',
        `area_code`  STRING COMMENT '地区编码',
        `iso_code`   STRING COMMENT '旧版ISO-3166-2编码,供可视化使用',
        `iso_3166_2` STRING COMMENT '新版IOS-3166-2编码,供可视化使用'
    ) COMMENT '省份表'
        ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
        NULL DEFINED AS ''
        LOCATION '/base_province/';

参考文章:

  1. http://t.csdn.cn/WmEEW
  2. hive 空值的处理
相关推荐
for_ever_love__16 分钟前
MySQL 锁与死锁讲透:行锁、间隙锁、Next-Key Lock 与排查方法
mysql·lock·行锁·死锁·间隙锁·排查·next-key
我不会起名字32228 分钟前
InnoDB 间隙锁与死锁:两个 UPDATE 互相等待的 3 个原因
数据库·mysql·事务·innodb·锁
Mortalbreeze1 小时前
MySQL 基础篇(六):聚合查询与分组查询
数据库·mysql
晚风叙码3 小时前
MySQL 表的约束详解:从空属性到外键
android·数据库·mysql·adb
刘胡子大叔10 小时前
MySQL 升到 8.4 前的兼容性自检清单
mysql
for_ever_love__11 小时前
MySQL 主从复制讲透:binlog 原理、搭建步骤与读写分离
java·数据库·mysql·binlog·读写分离·原理·主从复制
fish_xk15 小时前
mysql中的表的约束
数据库·mysql
java1234_小锋17 小时前
【技术专题】Mysql8 数据库 - Mysql8 添加,更新,删除数据
数据库·mysql
冰暮流星19 小时前
mysql之索引创建,查看,删除
数据库·mysql
福兮说21 小时前
IP 地址转整数的七个坑:192.168.1.1 算出负数、127.1 也是合法地址、存进 INT 直接溢出
javascript·网络·网络协议·tcp/ip·mysql·golang