amazon athena - 从多个表中选择而不连接

问题描述 投票:0回答:3

我有三张桌子。每个表与其他两个表都有共同的列,但某些属性有所不同。由于我对公共属性感兴趣,我想发出一个请求来从所有三个表中获取数据。

我需要通过 UNION 从所有三个表中获取项目。在 AWS Athena 中可以吗?

例如:

table1 (att1, att2, att3)
table2 (att1, att2, att_3)
table3 (att1, att2, att3, att4)

目标:在同一请求中从 table1、table2、table3 获取项目,无需加入。

sql amazon-web-services amazon-athena presto
3个回答
7
投票

这将返回三个表的列中的所有值(包括

table3
中的第四列。如果您只需要
att1, att2
,只需省略其他列并仅在
SELECT
语句中键入这些值。

SELECT att1, att2, att3, NULL as att4 FROM table1
UNION ALL
SELECT att1, att2, att_3, NULL FROM table2
UNION ALL
SELECT att1, att2, att3, att4 FROM table3
如果有来自不同表的值,则

UNION ALL
返回重复值,而
UNION
应用
DISTINCT
,这意味着返回唯一值集。

如果您正在寻找从您提到的所有表中返回公共列(按名称)的解决方案,那么您有以下选择:

  1. 像上面那样做,这意味着明确指定它
  2. 您必须编写一个过程来执行动态语句,该语句将在给定表中查找匹配的列

2
投票

在 AWS Athena 中,您可以使用 UNION 运算符合并两个(或多个)单独查询表达式的结果。例如:

SELECT att1, att2, att3 FROM table1
UNION
SELECT att1, att2, att3 FROM table2
UNION
SELECT att1, att2, att3 FROM table3

我假设 UNION 中的每个 SELECT 语句具有相同数量的列,并且具有相同的数据类型和相同的顺序。


0
投票

从表 1 中选择 att1、att2、att3

工会

从表2中选择att1、att2、att3

工会

从表3中选择att1、att2、att3

其中 att1、att2、att3 这些表应具有相同的数据类型

它将返回来自

的重复值

从表 1 中选择 att1、att2、att3

联合所有

从表2中选择att1、att2、att3

联合所有

从表3中选择att1、att2、att3

© www.soinside.com 2019 - 2024. All rights reserved.