hive的踩坑经验1

hive的踩坑经验1
一、hive表中新增字段或者修改字段时,需要使用cascade方式,否则新增字段,回刷数据还是存在为null的情况。

解决方案一:

1、ALTER TABLE tablename ADD COLUMNS (is_delete int COMMENT ‘是否进行删除的标记字段’) cascade; 然后回刷数据即可。

解决方案二:

2、ALTER TABLE tablename ADD COLUMNS (is_delete int COMMENT ‘是否进行删除的标记字段’) ; 需要删除历史分区,然后进行数据的回刷

最好使用方案一: 避免历史数据全部被清空的操作

二、hive中表与表之间关联时,left join on 特别注意在 on 部分时,务必要保证数据类型的一致性,否则会出现数据错误的情况。该问题在写SQL的时候,一定要多加关注。

此问题是hive隐式数据类型转化过程中遇到的坑。

错误案例:
select a.user_id,
b.user_id,
a.now_user_record_cars,
b.now_user_record_cars
from dmp.upf_driver_violation_df a
left join(
select user_id,now_user_record_cars from tmp.upf_driver_violation_df_nurc_test
) b
on a.user_id = b.user_id
where a.day = 20190807
and a.user_id = 4000000000003275341;

正确案例:

select a.user_id,
b.user_id,
a.now_user_record_cars,
b.now_user_record_cars
from dmp.upf_driver_violation_df a
left join(
select user_id,now_user_record_cars from tmp.upf_driver_violation_df_nurc_test
) b
on a.user_id =cast( b.user_id as bigint)
where a.day = 20190807
and a.user_id = 4000000000003275341;

三、hive 中有空值的字段判断,采坑
表字段值存在null时,如何进行<> 某个值的判断

案例: 取reasonName不是问题的数据,但是reasonName本身存在空值

方案-1、nvl(reasonName,‘未知’) <> ‘不是问题’
方案-2、(reasonName <> ‘不是问题’ or reasonName is null)

四、hdfs上有文件数据,但是表中查不到数据的解决方案
msck repair table + 具体的表名 即可完成查不到表数据的情况

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值