需要优化的配置单元查询

时间:2013-07-23 19:06:37

标签: hadoop mapreduce hive

我们有两个包含大量数据的表。我们必须在这两个表之间执行内连接。连接条件基于3列c1,c2,c3。

需要您的帮助,为上述方案编写优化查询。 请参考下面的数据模型。

table1

c1,c2,c3,c4,c5


table2

c1,c2,c3

感谢您的帮助。感谢。

3 个答案:

答案 0 :(得分:2)

如果我理解正确Hortonworks' founder Owen O'Malley,您可以通过编写

来优化它
SELECT t1.* from table1 t1
JOIN (SELECT table2.* FROM table2) t2
ON (t1.c1=t2.c1 AND t1.c1 = t2.c2 AND t1.c3 = t2.c3)

答案 1 :(得分:1)

因为看起来你没有使用table2中的任何新数据,逻辑是“返回table2中存在于table2中的所有行”。这是通过使用left semi join完成的 如果table2不是uniqe,则记录数可能会增加(c1 c2 c3的同一组合出现多次)。

答案 2 :(得分:0)

内连接将为您提供表1和表2中存在的所有行以及与表2中存在的其他列存在的任何额外组合。提到的左半连接(如@dimamah)仅提供给您左表1中存在的那些行。

对于您应该期望更多行的第一个解决方案

SELECT t1.* 
FROM table1 t1
INNER JOIN table2 t2
ON (t1.c1=t2.c1 AND t1.c1 = t2.c2 AND t1.c3 = t2.c3)

对于第二个解决方案,您将获得与t1相同的行数

SELECT t1.*
FROM table1 t1
LEFT SEMI JOIN table2 t2
ON (t1.c1=t2.c1 AND t1.c1 = t2.c2 AND t1.c3 = t2.c3)