使用 Athena 读取 s3 中的 Parquet 文件

Reading Parquet files in s3 with Athena

目标是将多个 parquet 文件合并到一个 Athena table 以便我可以查询它们。

我从 c​​sv 转换了两个 parquet 文件:

pandas.read_csv('a.csv').to_parquet('a.parquet', index=False)
pandas.read_csv('b.csv').to_parquet('b.parquet', index=False)

CSV 格式为 id,name,age,例如:

1,john,20
2,mark,25

我将这些上传到 S3 存储桶:s3://my-test-bucket,排列如下:

my-test-bucket
  -> folder1
    -> a.parquet
  -> folder2
    -> b.parquet

然后通过以下方式在 Athena 中创建 table:

CREATE EXTERNAL TABLE `my_table`(
  `id` int, 
  `name` string, 
  `age` int
)
STORED AS PARQUET
LOCATION 's3://my-test-bucket'
tblproperties ("parquet.compress"="SNAPPY");

但是,当我尝试通过以下方式查询 table 时:

SELECT * FROM my_table;

我的 return 得到空行。有什么我想念的吗?

一种可能的解决方法是使用 AWS Data Wrangler:

import awswrangler as wr

path = 's3://my-test-bucket'

# Assume the data has been extracted in dict form from .csv
df = pd.DataFrame({
    "id": [1, 2],
    "name": ["John", "Jane"],
    "age": [10, 11],
    "folder": [1, 2]
})

wr.s3.to_parquet(
    df=df,
    path=path,
    dataset=True,
    mode="overwrite",
    partition_cols=["folder"]
)

这将在 s3 中生成:

my-test-bucket
  -> folder=1
    -> <some hash>.parquet
  -> folder=2
    -> <some hash>.parquet