首页 > 其他 > 详细

数据实际环境里常见问题及解析(hive)

时间:2021-04-19 01:40:23      阅读:24      评论:0      收藏:0      [点我收藏+]

1:数据倾斜

理论

hive数据倾斜可能的原因有哪些?主要解决方法有哪些?

原因

1:数据倾斜多由于脏数据/特殊数据 (某一类数据集中)
2:大小表join
3:小文件过多;

解决方案

1:脏数据不参与关联,给特数据数据做随机(建表时)
2:使用mapjoin将小表加入内存。
3:合并小文件,通过set hive.merge.mapredfiles=true 解决;或者增加map数;(计算量大)

code

解决方法1:id为空的不参与关联
比如:select * from log a
join users b
on a.id is not null and a.id = b.id
union all
select * from log a
where a.id is null;
解决方法2:给空值分配随机的key值
如:select * from log a
left outer join users b
on
case when a.user_id is null
then concat(‘hive’,rand() )
else a.user_id end = b.user_id;

2:行列互换

行转列

students_info(stu_id,name,depart);
1、张三、语文
1、张三、数学
1、张三、英语
2、李四、语文
2、李四、数学
实现:
1、张三、语文|数学|英语
2、李四、语文|数学

答案

select stu_id,name,concat_ws(‘|‘,collect_set(depart)) as departs from students_info group by stu_id;
1: group by
2:collect_set 打平放成set
3: concat_ws 连接

列转行

students_info(stu_id,name,departs);
1、张三、语文|数学|英语
2、李四、语文|数学
实现:
1、张三、语文
1、张三、数学
1、张三、英语
2、李四、语文
2、李四、数学

答案

select stu_id, name,depart from students_info lateral view explode(split(depart,‘|‘)) as depart;
1: 拆成数组(split),如果是数组类型的,不需要。 Array [1,2,3]
2: 把数组分行(explode)
3: 虚拟分行数据为视图 (记得别称),同时放置到查询里。

3:TopN

海量数据处理,10亿个数中找出最大的10000个数, 知道几种说几种。

4:连续三天登录

5:班级、学号、分数 取20%高的

求班级分数高的,求前20%高的

6:人群包标签表

users uid  bigint, tags  array 123, [1,2,3,.....]  1000个标签 tags tag_id, tag_name, tag_type_id, tag_type_name 1, 北京,101,地域 2,18,201,年龄 3,科技,301,兴趣 人群包 ~ 1亿 地域、年龄、兴趣 北京 天津 18 20 二次元 tag_type_id, tag_type_name, num

7: 出一张报表,展示各个区的销售金额

订单表:城区、区域、品类、金额:

8: 统计满足最近7天,归属高档门店数大于500家 的城市

交易表 trade_info(iterm_id,shop_id,sales,price,dt),门店表:shop_info (shop_id,provice,city)

9:数据加工时序问题

10:kafka怎么保证同一个id放在一起

11:常见的hive优化

12:数据建模有几种

13:范式相关

数据实际环境里常见问题及解析(hive)

原文:https://www.cnblogs.com/cphmvp/p/14674886.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!