版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/amyacker/article/details/88415619
1.无效ID在关联时的数据倾斜问题
- 解决方法:函数过滤 null
把空值的id变成一个字符串加上随机数,就能把倾斜的数据分到不同的Reduce上,从而解决数据倾斜问题。因为空值不参与关联,即使分到不同 的 Reduce 上,也不会影响最终的结果。
SELECT * FROM tableName1 a LEFT OUTER
JOIN tableName2 b ON
CASE WHEN a.id IS NULL THEN CONCAT(‘hive_temp_id’,RAND()) ELSE a.id END =b.user_id;
2.Hive不允许直接访问非group by字段
- 对于非group by字段,可以使用collect_set函数收集这些字段,返回一个数组;
SELECT a,b FROM tableName GROUP BY a //Expression not in GROUP BY key 'b'
SELECT a,collect_set(b) FROM tableName GROUP BY a //正确的使用方式
- collect_set函数的其他用法:
使用数字下标,可以直接访问数组中的元素
填坑中