我有三个表。每个表和另外两个表有共同的列,但在某些属性上有所不同。由于我对公共属性感兴趣,所以我想发出一个请求,从所有三个表中获取数据。
我需要通过UNION从所有三个表中获取项目。在AWS Athena中有可能吗?
例如:
table1 (att1, att2, att3)
table2 (att1, att2, att_3)
table3 (att1, att2, att3, att4)
目标:从表1、表2和表3中获取项目,但不加入同一请求。
这将返回三个表(包括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
,这意味着返回唯一的值集。
如果你正在寻找一个从你提到的所有表中返回公共列(按名称(的解决方案,那么你可以选择:
- 按照上面的方式执行,这意味着明确指定
- 您必须编写一个过程来执行动态语句,该语句将在给定的表中查找匹配的列
在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语句都有相同数量的列,具有相同顺序的相同数据类型。