Hive - 从两个没有连接的表中提取数据

3
在MySQL中,我可以选择从两个表中进行选择,而不需要使用连接语句,如下所示:
SELECT t1.value, t2.value FROM t1, t2 WHERE (t1.value = t2.value);

另一方面,Hive可以接受 "FROM t1 join t2" 但不能接受 "FROM t1, t2"。有没有人对如何优化类似以下查询的查询有任何想法?
SELECT t1.value, t2.value FROM t1 join t2 WHERE (t1.value = t2.value);

还有别的方法吗?

(此外,为什么在MySQL中从“select from t1 join t2”切换到“select from t1,t2”可以优化查询呢?)

1个回答

4

为什么不想使用连接操作?从两个表中选择并要求它们之间有一些等式会导致内连接。

此外,使用您正在使用的连接操作会创建两个表的笛卡尔积,并消除其中 t1.value = t2.value 的记录。直接使用内连接将更加高效:

SELECT t1.value, t2.value FROM t1 JOIN t2 ON t1.value=t2.value;

如果您的表格中有一个非常小,您可以使用Map-Side Join。小表格将被缓存在内存中,而较大的表格则可以通过流式处理,无需进行Reduce步骤。要激活Map-Side Join,您需要在执行查询之前执行set hive.auto.convert.join=true;。用于Map-Side Join的最大表格大小阈值以字节为单位设置在属性hive.mapjoin.smalltable.filesize中。
(来源:Edward Capriolo、Dean Wampler和Jason Rutherglen。Programming Hive. O'Reilly, 2012年。)

谢谢,非常好用,特别是在地图端连接方面! - maia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接