Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Join 优化配置单元查询中的联接:c_Join_Hadoop_Hive_Query Optimization - Fatal编程技术网

Join 优化配置单元查询中的联接:c

Join 优化配置单元查询中的联接:c,join,hadoop,hive,query-optimization,Join,Hadoop,Hive,Query Optimization,我想知道哪种方法是优化连接这三个可能候选表中的两个表的配置单元(0.12)查询的最佳方法(并可能理解原因): 或 或 我无法控制表的存储和分区方式,所以我的问题更多的是关于 一般最佳实践而非具体案例。我确信a.id=b.id只有在b.dt='2014-09-01'时才可能,所以我想限制可以加入的数据以提高速度(b是一个巨大的表) 在阅读HIVE文档时,我了解到,通常最好是a是最小的表,b是(非常)大的表;然而,我不明白这是怎么回事 上面显示的不同查询在性能方面表现不同 如果有其他方法可以使用,我

我想知道哪种方法是优化连接这三个可能候选表中的两个表的配置单元(0.12)查询的最佳方法(并可能理解原因):

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

在阅读HIVE文档时,我了解到,通常最好是a是最小的表,b是(非常)大的表;然而,我不明白这是怎么回事 上面显示的不同查询在性能方面表现不同


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

我发现这三种方法在乔布斯先生、制图员使用和解释计划方面都是一样的。 通过注意表a足够小,可以使用地图侧连接优化。 通过切换表b上过滤器的位置,不会影响用于从表b检索数据的映射器数量。即使表b在子查询中也是如此


唯一的优化是分区修剪,如果表b恰好在列dt上分区,我认为这是唯一一个可以减少映射器数量的因素,而不是完整的表扫描。

表有多大,它适合内存吗?我想说,我使用的这个特殊的表可以,通常不会。
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 ;