左连接执行时间较长

v9tzhpje  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(364)

团队,
我有一个问题,有两个表(临时)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

... 执行和运行mr。
尝试了tez和mapjoin,streamtable。。。do设置

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

但也没有运气。有什么想法。。。或者任何帮助。。非常感谢。谢谢。

vuktfyat

vuktfyat1#

这东西是你的 LEFT JOIN 实际上是 cross 如果没有 ON 条件,它复制了行b x a, 2874561x127 = 365M ,则生成太多行 WHERE 仅筛选满足条件的行: A.DATE BETWEEN B.ALLOW_D AND B.SEL_D .
尽量减少右表中的行数。假设您知道表a中的最短日期是2018-01-01,请将其用作表b的筛选器(在使用join之前使用子查询) WHERE B.ALLOW_D>='2018-01-01' ). 如果你能替换 BETWEEN 带相等连接 ON 条件。加入前的聚合和筛选比交叉加入+筛选便宜。
尝试增量加载并在联接之前减少行数。

相关问题