Skew Join与Left Semi Join相关

转载 2016年08月30日 18:28:28
Skew Join
真实数据中数据倾斜是一定的, hadoop 中默认是使用
hive.exec.reducers.bytes.per.reducer = 1000000000
也就是每个节点的reduce 默认是处理1G大小的数据,如果你的join 操作也产生了数据倾斜,那么你可以在hive 中设定
set hive.optimize.skewjoin = true; 
set hive.skewjoin.key = skew_key_threshold (default = 100000)
hive 在运行的时候没有办法判断哪个key 会产生多大的倾斜,所以使用这个参数控制倾斜的阈值,如果超过这个值,新的值会发送给那些还没有达到的reduce, 一般可以设置成你
(处理的总记录数/reduce个数)的2-4倍都可以接受.
倾斜是经常会存在的,一般select 的层数超过2层,翻译成执行计划多于3个以上的mapreduce job 都很容易产生倾斜,建议每次运行比较复杂的sql 之前都可以设一下这个参数. 如果你不知道设置多少,可以就按官方默认的1个reduce 只处理1G 的算法,那么  skew_key_threshold  = 1G/平均行长. 或者默认直接设成250000000 (差不多算平均行长4个字节) 
Left Semi Join
hive 中没有in/exist 这样的子句,所以需要将这种类型的子句转成left semi join. left semi join 是只传递表的join key给map 阶段 , 如果key 足够小还是执行map join, 如果不是则还是common join.

Hive 中的 LEFT SEMI JOIN 与 JOIN ON 的前世今生

hive 的 join 类型有好几种,其实都是把 MR 中的几种方式都封装实现了,其中 join on、left semi join 算是里边具有代表性,且使用频率较高的 join 方式。 1、...

HIVE 中内连接(JOIN ON) 与 LEFT SEMI JOIN 分析

由于HIVE中都是等值连接,在JOIN使用的时候,有两种写法在理论上是可以达到相同的效果的。 由于HIVE中都是等值连接,在JOIN使用的时候,有两种写法在理论上是可以达到相同的效果的,但是由于实际...

Left join优化规则的研究

  • 2008年11月19日 18:01
  • 34KB
  • 下载

SQL left join

  • 2014年08月18日 14:19
  • 104KB
  • 下载

MySQL5.7性能优化系列(二)——SQL语句优化(2)——使用 Semi-Join半连接变换优化子查询,派生表和视图

优化器使用半连接策略来改进子查询执行,如本节所述。对于两个表之间的内部连接,连接从一个表返回一行多于另一个表中的匹配项。但是对于一些问题,唯一重要的信息是是否有匹配,而不是匹配的数量假设有一个名为cl...

sql的left join和count应用

  • 2014年09月29日 02:31
  • 17KB
  • 下载

使用exists(Semi-Join)优化distinct语句

在Oracle 官方文档,semi-join是这么解释的: A semijoin returns rows that match an EXISTS subquery without duplica...

【semi join】IN/EXISTS子查询的区别及其优化方式

【semi join】IN/EXISTS子查询的区别及其优化方式 2013-04-27 12:45:18 分类: Oracle     在ORACLE 11G大行其道的今天,还有很多人受...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Skew Join与Left Semi Join相关
举报原因:
原因补充:

(最多只允许输入30个字)