gpt4 book ai didi

join - 优化加入 HIVE 查询 : c

转载 作者:可可西里 更新时间:2023-11-01 16:59:22 25 4
gpt4 key购买 nike

我想知道哪一个是优化 HIVE (0.12) 查询连接这三个可能候选者中的两个表的最佳方法(并且可能理解为什么):

SELECT * FROM a join b ON (a.id = b.id) WHERE b.dt = "2014-09-01";

SELECT * FROM a JOIN b ON (a.id = b.id AND b.dt = "2014-09-01") ;

SELECT * FROM a JOIN ( 
SELECT * FROM b where dt = "2014-09-01" ) c
ON a.id = c.id ;

我无法控制表的存储和分区方式,所以我的问题更多是关于一般最佳实践优于特定案例。我确定 a.id = b.id 只有在 b.dt = '2014-09-01' 时才有可能所以我想限制可以连接的数据以提高速度(b 是一个巨大的表) .

阅读 HIVE 文档我了解到,通常情况下,a 是最小的表而 b 是(非常)大的表更好;但是我无法理解上面显示的不同查询会在性能方面表现。

如果有其他方法我可以使用,我也想知道。

最佳答案

我看到这三个在 #of MR-jobs 、使用的映射器和解释计划方面都是相同的。通过注意表 a 足够小,可以使用映射端连接优化。通过切换过滤器在表 b 上的位置不会影响用于从表 b 检索数据的映射器的数量。即使表 b 在子查询中也是如此。

唯一的优化是分区修剪,如果表 b 恰好在 col dt 上分区,我认为与全表扫描相比,这是减少映射器数量的唯一因素。

关于join - 优化加入 HIVE 查询 : c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26404612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com