在子选择中使用“SELECT *”进行Hive星型模式查询

时间:2015-10-30 16:19:22

标签: hive hiveql

我在Hive中遇到了一个先前实现的查询,我正在尝试查看,并且想知道是否有人可以解释所使用的查询模式的优点(或缺少)。查询结构是一个星型模式,以这种方式子选择连接表:

SELECT
  a.key
  a.field1
  b.field2
  c.field3
  d.field4
FROM first a
JOIN ( SELECT * FROM second ) b ON a.key = b.key
JOIN ( SELECT * from third ) c ON a.key = c.key
JOIN ( SELECT * from fourth ) d ON a.kay = d.key
SORT BY a.key DESC;

令我困惑的是你为什么要选择连接表(注意SELECT *没有WHERE)而不是直接加入它们。在我更改遗留代码查询之前(出于其他原因),我想了解这种方法的目标可能是什么。该查询是在Hive 0.10的时间编写的,但我们现在可以使用Hive 0.13了。这可能是遗留问题吗?

2 个答案:

答案 0 :(得分:0)

使用select all和没有WHERE子句的子查询没有任何优势。但是,如果适用于限制子查询中的列和行,以便它们的数据集适合内存并且仅映射连接将起作用,它可能很有用。如果hive.exec.parallel = true,则可以并行预先计算示例中的三个子查询。 同样SORT BY a.key DESC在此查询中似乎无用。

答案 1 :(得分:0)

我最好的猜测是它仍处于测试阶段。将where子句保留在自己的空间中。表现明智没有改善。