首页 > 解决方案 > 如何将最左边的表缓存在内存中以用于配置单元中的左外连接

问题描述

我有一个大表(1Tb 数据)需要与一个小表(100k 记录)连接

SELECT st.id
FROM small_table st
LEFT JOIN large_table lt
        ON st.id = lt.id

在上述情况下,我无法控制必须将哪个表缓存到内存中。我尝试使用 MAPJOIN 、 STREAMTABLE 提示,还尝试使用条件任务大小、小 tbale 大小等参数。因为小表在连接的最左侧,它没有被缓存到内存中

有没有办法控制需要缓存的表

注意:我无法更改表格位置或代码:
这里也不...

在此处输入图像描述

……也不在这里……

在此处输入图像描述

使用的参数:

set hive.execution.engine=tez; 
set hive.tez.container.size=4096; 
set hive.merge.mapredfiles=true; 
set tez.shuffle-vertex-manager.min-src-fraction=0.25; 
set tez.shuffle-vertex-manager.max-src-fraction=0.75; 
set hive.exec.dynamic.partition.mode=nonstrict; 
set tez.am.resource.memory.mb=3200 ; 
set tez.am.java.opts=-server -Xmx3200m -Djava.net.preferIPv4Stack=true -XX:+UseNUMA -XX:+UseParallelGC -XX:+UseConcMarkSweepGC ; 
SET hive.auto.convert.join=true; 
set hive.auto.convert.join.noconditionaltask.size=288435456;

标签: performancehivemapjoin

解决方案


推荐阅读