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 空值的处理
相关推荐
i***t9198 小时前
Linux下MySQL的简单使用
linux·mysql·adb
口嗨农民工11 小时前
3.2 mysql客户端和服务器的启动与停止
数据库·mysql
t***316512 小时前
Docker 之mysql从头开始——Docker下mysql安装、启动、配置、进入容器执行(查询)sql
sql·mysql·docker
小马爱打代码12 小时前
避坑指南:MySQL 迁移到 TiDB
数据库·mysql·tidb
q***577413 小时前
MySQL 实验1:Windows 环境下 MySQL5.5 安装与配置
windows·mysql·adb
云计算老刘14 小时前
1.项目实战:LAMP-LNMP-分离部署
linux·mysql·php·apache·mariadb
8***848214 小时前
如何在Linux中找到MySQL的安装目录
linux·运维·mysql
W***832015 小时前
如何在 Ubuntu 22.04 上安装 MySQL
linux·mysql·ubuntu
7***q60816 小时前
在linux(Centos)中Mysql的端口修改保姆级教程
linux·mysql·centos
q***614116 小时前
从MySQL迁移到PostgreSQL的完整指南
数据库·mysql·postgresql