Performance 如何提高Hive TEZ中的交叉连接性能?
我有一张50亿条记录的蜂巢表。我希望这50亿条记录中的每一条都与硬编码的52条记录连接起来 为了实现这一点,我做了一个交叉连接,就像Performance 如何提高Hive TEZ中的交叉连接性能?,performance,hive,hiveql,cross-join,apache-tez,Performance,Hive,Hiveql,Cross Join,Apache Tez,我有一张50亿条记录的蜂巢表。我希望这50亿条记录中的每一条都与硬编码的52条记录连接起来 为了实现这一点,我做了一个交叉连接,就像 select * from table1 join table 2 ON 1 = 1; 这需要5个小时才能以尽可能高的内存参数运行 是否有其他短或更简单的方法可以在更短的时间内实现这一点?您的查询速度很慢,因为交叉联接(笛卡尔积)是由一个减速机处理的。解决方法是加强更高的并行性。一种方法是将查询转换为内部连接,以便利用映射端连接优化 将t1作为( 从表1中选择
select *
from table1 join table 2
ON 1 = 1;
这需要5个小时才能以尽可能高的内存参数运行
是否有其他短或更简单的方法可以在更短的时间内实现这一点?您的查询速度很慢,因为交叉联接(笛卡尔积)是由一个减速机处理的。解决方法是加强更高的并行性。一种方法是将查询转换为内部连接,以便利用映射端连接优化
将t1作为(
从表1中选择col1,col2,…,0作为k
)
,t2as(
从表2中选择col3,col4,…,0作为k
)
选择
*
从t1连接t2
关于t1.k=t2.k
现在,每个表(CTE)都有一个名为
k
的伪列,其值相同0
。因此,它的工作原理就像交叉连接一样,而只进行地图侧连接操作。您的查询速度很慢,因为交叉连接(笛卡尔积)是由一个减速机处理的。解决方法是加强更高的并行性。一种方法是将查询转换为内部连接,以便利用映射端连接优化
将t1作为(
从表1中选择col1,col2,…,0作为k
)
,t2as(
从表2中选择col3,col4,…,0作为k
)
选择
*
从t1连接t2
关于t1.k=t2.k
现在,每个表(CTE)都有一个名为k
的伪列,其值相同0
。因此,它的工作原理与交叉连接类似,而只进行地图侧连接操作。启用地图连接:
set hive.auto.convert.join=true;
select *
from table1 cross join table2;
该表很小(52条记录),应该可以放入内存中。Map join操作符将把小表加载到分布式缓存中,每个reducer容器将使用它来处理内存中的数据,比普通连接快得多。启用Map join:
set hive.auto.convert.join=true;
select *
from table1 cross join table2;
该表很小(52条记录),应该可以放入内存中。Map join操作符会将小表加载到分布式缓存中,每个reducer容器都会使用它来处理内存中的数据,速度比普通联接快得多。我尝试了这个方法,但仍然有一个reducer在长时间运行(显然是1=1的方法)。我尝试了这个方法,但仍然有一个reducer在长时间运行(显然是1=1的那个)。