Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何提高Hive TEZ中的交叉连接性能?_Performance_Hive_Hiveql_Cross Join_Apache Tez - Fatal编程技术网

Performance 如何提高Hive TEZ中的交叉连接性能?

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中选择

我有一张50亿条记录的蜂巢表。我希望这50亿条记录中的每一条都与硬编码的52条记录连接起来

为了实现这一点,我做了一个交叉连接,就像

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的那个)。