码迷,mamicode.com
首页 > 数据库 > 详细

sqoop导出hive数据到mysql避免空值

时间:2020-03-31 12:49:45      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:oal   nat   jdbc   ==   user   char   rac   NPU   input   

sqoop导入导出问题

sqoop export --connect jdbc:mysql://ip:3306/eqpt_base_db?characterEncoding=utf8 --username root --password secret_password --table A_JQZ_T_GAS_GET_ORDER_NUM_INFO_S  --export-dir  /user/hive/warehouse/origin_ennenergy_energytrade.db/a_jqz_t_gas_get_order_num_info_s  --input-null-string ‘\\N‘ --input-null-non-string ‘\\N‘ --fields-terminated-by ‘\t‘

为了避免空值时,没有数据,需要以下命令:

--input-null-string ‘\\N‘ --input-null-non-string ‘\\N‘ --fields-terminated-by ‘\t‘

 

 

由sqoop导入失败发现的hive的空值问题

先说基础知识
hive中空值分两种
(1)NULL
hive中null实际在HDFS中默认存储为‘\N‘,通过查询显示的是‘NULL‘。

这时如果查询为空值的字段可通过语句:aaa is null 或者 aaa =‘\N‘ 实现。
此时可用hive中与null有关的函数,如nvl,coalesce,is null等判断是否为null是为true。

产生NULL值,一般都是由hive外链接引起的。

(2)‘‘
‘‘ 表示的是字段不为null且为空字符串,此时用 aaa is null 是无法查询这种值的,必须通过 aaa ==‘‘ 或者 length(aaa)=0 查询

产生‘‘值,一般都是源数据为空。

之前项目中用到sqoop工具从HDFS中往数据库中导数据时,任务失败。不得已,用二分法导数据,去排查问题,看看是哪一条数据导致任务报错。最后排查到数据文件中有字段的值为空。但是奇怪的是,在hive sql里面已经加为null判断了。再看数据文件,发现其中的值不是通常的NULL,或者是\N,而是‘‘。

所以得到原因,用判断null的nvl函数并不能排除‘‘的情况,需要用IF(aaa == ‘‘,‘未知‘,aaa) AS aaa 来判断。

 
 

sqoop导出hive数据到mysql避免空值

标签:oal   nat   jdbc   ==   user   char   rac   NPU   input   

原文地址:https://www.cnblogs.com/18800105616a/p/12603980.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!