Hive 蜂巢倾斜连接问题

Hive 蜂巢倾斜连接问题,hive,hiveql,skew,Hive,Hiveql,Skew,我对蜂巢中的歪斜连接有些怀疑 1.hive何时使用公共联接来处理数据,因为我只在设置blow属性后才能看到映射联接 设置hive.optimize.skewjoin=true 设置hive.mapjoin.smalltable.filesize=2 2.为什么不使用左连接进行斜连接 下面是表和sql: tmp.skew_large_table 字段 imei,imsi,mac,phone,data_date; total rows:290,0808 skew key : 86

我对蜂巢中的歪斜连接有些怀疑

1.hive何时使用公共联接来处理数据,因为我只在设置blow属性后才能看到映射联接

  • 设置hive.optimize.skewjoin=true
  • 设置hive.mapjoin.smalltable.filesize=2
2.为什么不使用左连接进行斜连接

下面是表和sql:

tmp.skew_large_table 字段 imei,imsi,mac,phone,data_date;
    total rows:290,0808
    skew key : 868407035454956 670081
-----------
tmp.test_skew_small_table  字段  imei,package,data_date
    total rows:857,6164
    skew key : 868407035454956  10461
-----------

sql:
select a.*,b.*
    from tmp.skew_large_table a
    join
    tmp.test_skew_small_table b
    on a.imei=b.imei;

在阅读了hive的源代码之后。我得到了答案

问题1:
hive.mapjoin.smalltable.filesize
hive.auto.convert.join
不适用于倾斜连接

对于每个skey连接,配置单元将使用映射连接来处理它

问题2 外部连接不会触发斜连接,源代码显示

// We are trying to adding map joins to handle skew keys, and map join righ
// now does not work with outer joins  
    if (!GenMRSkewJoinProcessor.skewJoinEnabled(parseCtx.getConf(), joinOp)) {
      return;
    }

为什么要设置set hive.mapjoin.smalltable.filesize=2?这是试图禁用映射联接吗?是的,我想满足一个公共联接。然后
设置hive.auto.convert.join=false
是关闭map join的更明显的方法,它仍然使用map join处理skewKey。