首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UNION查询中执行DISTRIBUTE时,是否需要子查询?

在UNION查询中执行DISTRIBUTE时,是否需要子查询?
EN

Stack Overflow用户
提问于 2020-06-22 18:08:08
回答 1查看 213关注 0票数 1

考虑:

代码语言:javascript
复制
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完成后应用,即

代码语言:javascript
复制
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看起来都是一样的:

代码语言:javascript
复制
== 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[]

但我不清楚,对于更复杂的查询,情况总是如此(在我尝试过的更实际的用例中,一列的列别名#略有不同)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-30 15:05:40

来自蜂巢文档

若要对单个SELECT应用ORDER、ORDER、ORDER、SELECT或place,请将子句放在括住SELECT的括号内: 选择key FROM (按键限制从src顺序选择键) subq1 UNION选择key FROM (按键限制从src1顺序选择键) subq2 若要向整个UNION结果应用ORDER、SORT、CLUSTER、DISTRIBUTE或last子句,请在最后一个UNION结果之后将顺序按、排序、按群集、按或限制排列。 下面的示例同时使用ORDER和clauses子句: 从src联合选择键,按键限制10从src1顺序选择键

因此,在您的例子中,DISTRIBUTE子句将应用于UNION的整个结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62520791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档