在 Athena 中加入 2 个具有不同列但公共键(id)列的镶木地板文件

Join 2 parquet files with different columns but common key(id) column in Athena

我想知道 AWS Athena 中是否有一种方法可以将 2 个镶木地板文件“合并”为一个 table 124=]-正在处理?

例如:

文件 1:

id first_name
1 乔恩
2

文件 2:

id last_name 状态
1 母鹿 1
2 史密斯 0

雅典娜决赛Table结果:

id first_name last_name 状态
1 乔恩 母鹿 1
2 史密斯 0

我知道我可以在两个文件中进行连接,但我想知道,因为我使用的是 Parquet,是否可以在没有连接的 sql 命令的情况下实现这一点?

谢谢!

Athena 基本上只是 Presto/Trino 的修改版本,它是一个通过 Hive(或类似 Glue/Iceberg 的东西)的纯 SQL 接口。除了为它设置 reader 之外,它并不真正关心底层存储是什么。所以,这是值得怀疑的。它需要扫描每个文件并加入键,因为它以类似的方式处理镶木地板、兽人、csv 等。

Parquet 也是一种相当复杂的格式。即使这两个文件具有相同的列,它们也可以在内部进行布局或排序非常不同。这不像它们都是简单的排序 CSV,您可以在其中“从第 12 行的两个文件中获取并合并所有内容”或类似的东西。

因此,我怀疑您会在 Athena/presto 中或它们之外找到类似的东西。这听起来不可行。任何执行此操作的操作基本上都必须进行连接,即使您没有这样称呼它。

您可以直接在 python:

中使用镶木地板文件来完成
import pyarrow.parquet as pq

df_1 = pq.read_table("file1.pq").to_pandas()
df_2 = pq.read_table("file2.pq").to_pandas()

joined_df = df_1.merge(df_2, left_on='id', right_on='id', how='inner')

joined_df.to_parquet('file3.pq')

但我会注意其他答案中提到的所有危险信号。