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 空值的处理
相关推荐
armcsdn1 小时前
基于Docker Compose部署Traccar容器与主机MySQL的完整指南
mysql·docker·容器
袋鼠云数栈2 小时前
使用自然语言体验对话式MySQL数据库运维
大数据·运维·数据库·后端·mysql·ai·数据治理·数栈·data+ai
渣渣盟2 小时前
掌握MySQL函数:高效数据处理指南
sql·mysql·adb·dba
铅笔侠_小龙虾3 小时前
Docker 实战 -- Mysql
mysql·docker·容器
Britz_Kevin4 小时前
从零开始的云计算生活——番外2,MySQL组复制
数据库·mysql·云计算·生活·#组复制
工藤学编程4 小时前
分库分表之实战-sharding-JDBC绑定表配置实战
数据库·分布式·后端·sql·mysql
一只fish5 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(23)
数据库·mysql
程序猿小D5 小时前
[附源码+数据库+毕业论]基于Spring Boot+mysql+vue结合内容推荐算法的学生咨询系统
数据库·vue.js·spring boot·mysql·毕业设计·推荐算法·学生咨询系统
大菠萝学姐6 小时前
基于Spring Boot和Vue的高校图书馆座位预约系统的设计与实现
java·vue.js·spring boot·后端·python·mysql·vue
叁沐7 小时前
MySQL 10 MySQL为什么有时候会选错索引?
mysql