数据倾斜知识点

本文介绍了数据倾斜的概念,常见发生数据倾斜的情况,包括小表与大表join、未与聚合函数配合的group by操作及null值过多。探讨了数据倾斜的原因,如键值分布不均、业务特性等,并提供了具体的业务场景解决方案,如处理空值、不同数据类型关联及大小表关联查询。通过转换数据类型、使用map join等方法来优化数据倾斜问题。
摘要由CSDN通过智能技术生成

1、什么是数据倾斜
数据倾斜就是大量数据分布不均衡,数量过多的那个值会导致处理该值的节点疲惫处理然后GG。

2、比较容易发生数据倾斜的情况
A、小表与大表进行join关联的时候
B、对数据进行group by,没有和聚合函数搭配使用的时候
C、null值过多的时候

3、产生数据倾斜的原因
A:键值过多分布不均衡
  B:业务数据本身的特性
  C:建表考虑不周全
  D:某些 HQL 语句本身就存在数据倾斜

4、业务场景
(1)空值产生的数据倾斜
场景说明
在日志中,常会有信息丢失的问题,比如日志中的 user_id,如果取其中的 user_id 和用户表中的 user_id 相关联,就会碰到数据倾斜的问题。

解决方案
解决方案 1:user_id 为空的不参与关联

select * from log a join user b on a.user_id is not null and a.user_id = b.user_id
union all
select * from log c where c.user_id is null;
解决方案 2:赋予空值新的 key 值

select * from log a left outer join user b on
case when a.user_id is null then concat(‘hive’,rand()) else a.user_id end = b.user_id
总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值