hadoop 处理mysql_Hadoop mysql导入hive的NULL值处理方案 _好机友

目前提供两种方法解决数据库中的字段值为NULl导入到HIVE中后变成空字符串的方法,使用以下方法可以保障在mysql中存储的是NULL,导入到HIVE表后也是NULL

第一种

解决方法: 直接修改hive表的属性,让hive表中为空的值显示为NULL

alter table ${table_name} SET SERDEPROPERTIES('serialization.null.format' = '');

${table_name}填写你实际的hive表名

使用限制: 若原始数据中有本身为空的值在HIVE表中也会显示为NULL。根据HIVE的设计原理,这是不可避免的情况,在HIVE中必须要指定一种方式来表示NULL值,若空值需要存储,则根据情况修改为其他的存储格式

第二种

解决方法: 通过开源工具sqoop在后台服务器上进行导入

①部署完sqoop客户端

②修改HIVE表的属性

alter table ${table_name} SET SERDEPROPERTIES('serialization.null.format' = '\N');

③执行sqoop导入命令sqoop import \ --connect "jdbc:mysql://x.x.x.x:3306/easytest" \ --username xxx \ --password xxx \ --table xxx \ --null-string '\N' \ --null-non-string '\N' \ --hive-import \ -m 1 \ --hive-database easytest1 \ --hive-table test1 \ --target-dir /tmp/easytest/test1 注:--target-dir目录不能已经存在,否则会报错 --null-string 如果指定列为字符串类型,使用指定字符串替换值为null的该类列的值 --null-non-string 如果指定列为非字符串类型,使用指定字符串替换值为null的该类列的值

使用限制:导入的hive目标表需要提前建好,sqoop的方式是设定了'\N'来表示NULL值,若本身源数据中存了'\N',则不能使用"\N"来代替NULL,需要修改--null-string,--null-non-string,以及serialization.null.format的值为其他代替值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值