在子选择中使用 'SELECT *' 的 Hive 星型模式查询
Hive star schema query with 'SELECT *' in sub-selects
我遇到了一个以前在 Hive 中实现的查询,我正在尝试理解它,并且想知道是否有人可以解释所使用的查询模式的优点(或缺点)。查询结构是一个星型模式,它以这种方式 select 连接表:
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 连接表(请注意 SELECT *
而没有 WHERE
)而不是直接连接它们。在我更改遗留代码查询(出于其他原因)之前,我想了解这种方法的目标是什么。查询是在 Hive 0.10 的时候写的,但是我们现在已经到了 Hive 0.13。这可能是解决某些遗留问题的方法吗?
带有 select all 且没有 WHERE 子句的子查询没有任何优势。但是,如果适用于限制子查询中的列和行,这样它们的数据集将适合内存并且 map-only join 将起作用,它可能很有用。如果 hive.exec.parallel=true,则示例中的三个子查询可以并行 pre-calculated。
SORT BY a.key DESC
在此查询中似乎也没用。
我最好的猜测是它保留在测试阶段。将 where 子句保留在自己的空间中。性能方面没有改善。
我遇到了一个以前在 Hive 中实现的查询,我正在尝试理解它,并且想知道是否有人可以解释所使用的查询模式的优点(或缺点)。查询结构是一个星型模式,它以这种方式 select 连接表:
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 连接表(请注意 SELECT *
而没有 WHERE
)而不是直接连接它们。在我更改遗留代码查询(出于其他原因)之前,我想了解这种方法的目标是什么。查询是在 Hive 0.10 的时候写的,但是我们现在已经到了 Hive 0.13。这可能是解决某些遗留问题的方法吗?
带有 select all 且没有 WHERE 子句的子查询没有任何优势。但是,如果适用于限制子查询中的列和行,这样它们的数据集将适合内存并且 map-only join 将起作用,它可能很有用。如果 hive.exec.parallel=true,则示例中的三个子查询可以并行 pre-calculated。
SORT BY a.key DESC
在此查询中似乎也没用。
我最好的猜测是它保留在测试阶段。将 where 子句保留在自己的空间中。性能方面没有改善。