在 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')
但我会注意其他答案中提到的所有危险信号。
我想知道 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')
但我会注意其他答案中提到的所有危险信号。