【发布时间】:2017-05-07 06:37:45
【问题描述】:
我有 2 张这样的桌子。我正在运行 Hive 查询,并且 Windows 功能在 Hive 中似乎非常有限。
餐桌部
id | name |
1 | a |
2 | b |
3 | c |
4 | d |
表时间(使用重负载查询构建,因此如果我需要加入另一个新创建的表时间,这将是一个非常缓慢的过程。)
id | date | first | last |
1 | 1992-01-01 | 1 | 1 |
2 | 1993-02-02 | 1 | 2 |
2 | 1993-03-03 | 2 | 1 |
3 | 1993-01-01 | 1 | 3 |
3 | 1994-01-01 | 2 | 2 |
3 | 1995-01-01 | 3 | 1 |
我需要检索这样的东西:
SELECT d.id,d.name,
t.date AS firstdate,
td.date AS lastdate
FROM dbo.dept d LEFT JOIN dbo.time t ON d.id=t.id AND t.first=1
LEFT JOIN time td ON d.id=td.id AND td.last=1
如何得到最优化的答案?
【问题讨论】:
-
将常量比较(即
t.first=1)放在where子句中,而不是join子句中。除此之外,这看起来很简单。 -
@Donnie 我是这些蜂巢表的新手,这个时间表是由一个复杂的
SELECT查询构建的,我想做的是让时间表只被调用一次,这可能吗? @TimBiegeleisen 我需要一个查询来完成此操作。而且这个表是由繁重的工作构建的,实际上最好的方法是使用临时表,但我不知道如何在 hive 中使用它是最好的。 -
@Donnie - 这在逻辑上不等同于原始查询
-
我假设每个部门
first/last= 1 的行不超过一行? -
是的,它们是由行号生成的,我只是将其简化为有问题的临时表。
标签: sql hive hiveql memory-optimized-tables