我已经迁移了Teradata桌子'数据进入蜂巢。
现在我必须在导入的数据之上构建汇总表。摘要表需要从五个源表构建
如果我选择加入,我需要加入五个表,是否有可能进入蜂巢?或者我应该分五个部分打破查询? 对于这个问题应该采取什么方法?
请建议
答案 0 :(得分:11)
蜂巢中的五种连接当然是可能的,并且(自然地)可能慢到非常慢。
您应该考虑在
上共同划分表格其他选项包括提示。例如,考虑其中一个表是否很大而其他表是否较小。然后,您可以使用 streamtble 提示
假设a很大:
SELECT /*+ STREAMTABLE(a) */ a.val, b.val, c.val, d.val, e.val
FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1) join d on (d.key = c.key) join e on (e.key = d.key)
改编自:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins :
所有五个表都连接在一个map / reduce作业和值中 对于表b,c,d和e的键的特定值是 缓冲区中的内存缓冲区。然后检索每一行 从a开始,使用缓冲的行计算连接。如果 省略了STREAMTABLE提示,Hive流式传输最右边的表 加入。
另一个提示是 mapjoin ,这对于在内存中缓存小表非常有用。
假设a很大且b,c,d,e小到足以适合每个映射器的内存:
SELECT /*+ MAPJOIN(b,c,d,e) */ a.val, b.val, c.val, d.val, e.val
FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)
join d on (d.key = c.key) join e on (e.key = d.key)
答案 1 :(得分:0)
是的,您可以在一个查询中join multiple tables。这为Hive提供了许多机会,可以在您将其分解为单独的查询时进行无法完成的优化。