前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql导入hive的NULL值处理方案

mysql导入hive的NULL值处理方案

原创
作者头像
袁宋
发布2019-07-02 17:21:25
4.5K0
发布2019-07-02 17:21:25
举报
文章被收录于专栏:大数据平台TBDS大数据平台TBDS

目前提供两种方法解决数据库中的字段值为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值,若空值需要存储,则根据情况修改为其他的存储格式

第二种

PS:此方法依赖sqoop工具,若用户是在TBDS中使用则需要按照如下文档部署sqoop组件。https://cloud.tencent.com/developer/article/1454899

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

①部署完sqoop客户端

②修改HIVE表的属性

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

③执行sqoop导入命令

代码语言:javascript
复制
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-string>如果指定列为字符串类型,使用指定字符串替换值为null的该类列的值 
--null-non-string <null-string>如果指定列为非字符串类型,使用指定字符串替换值为null的该类列的值

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一种
  • 第二种
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档