python Athena如何从S3存储桶读取 parquet 文件

hpcdzsge  于 2023-01-29  发布在  Python
关注(0)|答案(2)|浏览(227)

我正在将一个python项目(s3 + Athena)从使用csv移植到 parquet 上。
我可以制作 parquet 文件,可以通过Parquet View查看。
我可以把文件上传到s3 bucket。
我可以创建指向s3存储桶的Athena表。
但是,当我在Athena Web GUI查询表时,它运行了10分钟(似乎永远不会停止),没有显示结果。
整个项目很复杂,我尽量把事情简单化。
1.假设我们有以下csv文件(test.csv)

"col1","col2"
    "A","B"

2.然后,我使用下面的python(2. 7)代码将其转换为parquet文件(test.parquet)

import fastparquet
    import pandas as pd

    df = pd.read_csv(r"test.csv")
    fastparquet.write(r"test.parquet", df, compression="GZIP")

3.通过s3 Web GUI将test.parquet上传到s3存储桶文件夹“abc_bucket/abc_folder”
4.通过Athena Web GUI创建下表

CREATE EXTERNAL TABLE IF NOT EXISTS abc_folder (
        `col1` string,
        `col2` string)
    STORED AS PARQUET
    LOCATION 's3://abc_bucket/abc_folder/'
    TBLPROPERTIES (
        "parquet.compress"="GZIP"
    );

5.最后,在Athena上运行下面的SQL语句。这个SQL语句运行了10分钟,看起来好像是永远。

select *
    from abc_folder;

我的问题是上面的哪一步是错误的,以至于我不能从Athena查询表。
我们非常感谢您的帮助。

yjghlzjz

yjghlzjz1#

尝试查看您的 parquet 数据在S3桶本身与“选择”选项。如果它的罚款,然后使用雅典娜创建表您的 parquet 文件与适当的表列标题。稍后预览表查看内容。

fjnneemd

fjnneemd2#

我们可以通过为给定的s3位置创建一个表来读取雅典娜的 parquet 文件。

CREATE EXTERNAL TABLE abc_new_table (
    dayofweek INT,
    flightdate STRING,
    uniquecarrier STRING,
    airlineid INT
)
PARTITIONED BY (flightdate STRING)
STORED AS PARQUET
LOCATION 's3://abc_bucket/abc_folder/'
tblproperties ("parquet.compression"="SNAPPY");

假设s3://abc_bucket/abc_folder/*目录中的 parquet 文件以SNAPPY格式压缩。
更多详细信息,请参见this AWS文档。

相关问题