【发布时间】:2014-10-16 12:34:12
【问题描述】:
我想知道哪一个是优化连接这三个可能候选者中的两个表的 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 是(非常)大的表;但是我无法理解 上面显示的不同查询会根据性能表现。
如果有其他方法我可以使用,我也想知道。
【问题讨论】:
-
一张桌子有多大,它适合记忆吗?
-
我会说我正在使用的这个特殊的可以,一般不,他们不会。
标签: join hadoop hive query-optimization