hive两个大表join操作

https://blog.csdn.net/qq_42189083/article/details/82177689

(1)第一次优化,on 字段准换成类型相同

(2)第二次优化,on 后面字段的缺失率很高(为空、字段长度为零、字段填充了非整数),关联字段为无效字段,则不需要关联

(3)虽然设置了左表关联字段为空不去关联右表,但是这样做,左表中未关联的记录(字段为空)将会全部聚集在一个reduce中进行处理,体现为reduce进度长时间处在99%。 换一种思路,解决办法的突破点就在于如何把左表的未关联记录的key尽可能打散,因此可以这么做:若左表关联字段无效(为空、字段长度为零、字段填充了非整数),则在关联前将左表关联字段设置为一个随机数,再去关联右表,这么做的目的是即使是左表的未关联记录,它的key也分布得十分均匀。

from trackinfo a 
left outer join pm_info b 
on ( 
case when (a.ext_field7 is not null 
and length(a.ext_field7) > 0 
and a.ext_field7 rlike ‘^[0-9]+$’) 
then 
cast(a.ext_field7 as bigint) 
else 
cast(ceiling(rand() * -65535) as bigint) 
end = b.id 
)

posted @ 2020-10-15 15:56  hulifang  阅读(2111)  评论(0编辑  收藏  举报