【发布时间】:2020-06-22 18:08:08
【问题描述】:
考虑:
select 1 as id, 2 as val
UNION ALL
select 2 as id, 1 as val
DISTRIBUTE BY id SORT BY val
DISTRIBUTE BY 是否仅适用于第二个 select 表,还是适用于 UNION ALL 的结果,这有点模棱两可。
我是否需要一个子查询来确保 DISTRIBUTE 步骤仅在 UNION ALL 完成后应用,即
select * from (
select 1 as id, 2 as val
union all
select 2 as id, 1 as val
)
DISTRIBUTE BY id SORT BY val
两个查询的EXPLAIN 看起来相同:
== Physical Plan ==
*(3) Sort [val#636 ASC NULLS FIRST], false, 0
+- Exchange hashpartitioning(id#635, 200)
+- Union
:- *(1) Project [1 AS id#635, 2 AS val#636]
: +- Scan OneRowRelation[]
+- *(2) Project [2 AS id#637, 1 AS val#638]
+- Scan OneRowRelation[]
但我不清楚对于更复杂的查询是否总是如此(在我尝试过的更实际的用例中,一列的列别名 # 存在细微差别)
【问题讨论】: