很多时候,你以为你懂了,其实你并没有。采坑指南就是将踩过的坑记住。
- 1、hive 表新增字段时,采坑
hive表中新增字段或者修改字段时,需要使用cascade方式,否则新增字段,回刷数据还是存在为null的情况。
解决方案一:
1、ALTER TABLE tablename ADD COLUMNS (is_delete int COMMENT '是否进行删除的标记字段') cascade; 然后回刷数据即可。
解决方案二:
2、ALTER TABLE tablename ADD COLUMNS (is_delete int COMMENT '是否进行删除的标记字段') ; 需要删除历史分区,然后进行数据的回刷
最好使用方案一: 避免历史数据全部被清空的操作。
- 2、hive 表与表相互进行关联时,采坑
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;
- 3、hive 中有空值的字段判断,采坑
表字段值存在null时,如何进行<> 某个值的判断
案例: 取reasonName不是问题的数据,但是reasonName本身存在空值
方案-1、nvl(reasonName,'未知') <> '不是问题'
方案-2、(reasonName <> '不是问题' or reasonName is null)
- 4、已知2018-05-04 该日期属于星期几
可使用的函数如下:
select pmod(datediff('2018-05-04', '1920-01-01') - 3, 7)
- 4、 Hive笔记之collect_list/collect_set(列转行)
Hive笔记之collect_list/collect_set(列转行)文档
- 5、hive使用的一些技巧
- 6、正则表达式,寻找截止到第一个空格的字符串
正则找到第一个空格: ^(?:\S*?)(\s)
网友评论