在 AWS Athena 中连接两个表时选择除一列之外的所有列

arm*_*iro 2 sql join amazon-web-services presto amazon-athena

我想在 AWS Athena 中使用 Presto SQL 语法连接两个具有许多列的大型表。我的代码非常简单:

select
    * 
from TableA as A
left join TableB as B
on A.key_id = B.key_id
;
Run Code Online (Sandbox Code Playgroud)

连接后,主键列 ( key_id) 重复两次。两个表都有超过 100 列,并且连接需要很长时间。如何修复该问题,使该key_id列在最终结果中不会重复两次?

PS AWS Athena 不支持except命令,与 Google BigQuery 不同。

Kir*_*rst 5

这将是一个很好的功能,但不是标准 SQL 的一部分。该EXCEPT关键字是基于集合的操作(即过滤行)。

在 Athena 中,与标准 SQL 一样,您必须指定要包含的列。这样做的理由是它的维护成本较低,事实上,最佳实践是始终明确声明您想要的列 - 永远不要将其保留为“无论存在什么列”。这将有助于确保您的查询在表结构发生变化时不会改变行为。

一些 SQL 语言具有这样的功能。我知道Oracle也有这个。但据我所知,Athena (/PrestoSQL/Trino) 没有。