左键花费更多时间执行

时间:2019-02-05 13:49:23

标签: hive

团队,

我有一个问题,有2个表(临时)A和B,A有127行,B​​有约2874561条记录...

尝试做

SELECT A.COL1, B.COL2 
  FROM A LEFT JOIN B 
 WHERE A.DATE BETWEEN B.ALLOW_D AND B.SEL_D

...在先生上执行和运行需要花费大量时间。

尝试过Tez并尝试MAPJOIN,STREAMTABLE ...进行设置

set mapreduce.input.fileinputformat.split.maxsize=71582788;
set mapreduce.input.fileinputformat.split.minsize=71582788;

也没有运气。任何想法...或任何帮助..非常感谢。谢谢。

1 个答案:

答案 0 :(得分:1)

问题是,如果您的onAuthStateChanged实际上没有LEFT JOIN的情况,则实际上它的作用是cross,它将复制B x A行,ON,产生太多行,然后2874561x127 = 365M仅过滤满足以下条件的行:WHERE

尝试减少右表中的行数。假设您知道表A中的最短日期是2018年1月1日,请将其用作表B的过滤器(在与A.DATE BETWEEN B.ALLOW_D AND B.SEL_D联接之前使用子查询)。理想情况下,如果您可以用相等连接WHERE B.ALLOW_D>='2018-01-01'条件替换BETWEEN。连接前的聚合和过滤比交叉连接+过滤便宜。

尝试逐步加载并减少连接前的行数。