我们在hive中使用多个大表和小表。我们需要执行多个 INNER JOIN
但是我加入的执行在3个小时后也没有完成。我使用了一种技巧,我们最终需要使用大表。
我的示例代码如下:
SELECT
a.name,
a.qual,
a.year
FROM emp 1 a
INNER JOIN emp2 b
ON trim(a.qual) = (b.qual)
INNER JOIN emp3 c
ON trim(a.qual) = (c.qual)
INNER JOIN emp4 d
ON trim(c.year) = (d.year)
INNER JOIN emp5 e
ON trim(a.qual) = (e.qual)
AND trim(d.marks) = (e.marks)
GROUP BY
a.name,
a.qual,
a.year;
emp1 = count 5677
emp2 = count 7890900
emp3 = count 8755788
emp4 = count 78524565
emp5 = count 875684265
上面的表格有名字,年龄,月份,质量,年份的模式。这些不是实际的表格。为了给出逻辑,我重新命名了表名和列名。我真正的逻辑和表计数几乎是一样的。
1条答案
按热度按时间xpcnnkqh1#
您没有从主表中筛选任何行
emp1
. 在这种情况下,全表扫描是该表的最佳解决方案。它有5公里的行,所以任何长度都不是问题。但是,在访问相关表时,可能需要使用索引。我会尝试:
这些索引应该会大大提高连接性能,但这仍然取决于您实际从每个表中选择了多少行。
如果这没有帮助,那么您需要检索查询的执行计划。如果你把它贴出来,我们可以帮你看。
另外,修复数据模型、清理数据和删除
trim()
正在使用的函数。尽管如此,它似乎对这个查询并不重要,因为嵌套循环联接(nlj)无论如何都应该在这种情况下有效地工作。祝你好运。