雅典娜如何从S3存储桶中读取实木复合地板文件

时间:2018-09-06 03:45:17

标签: python amazon-s3 parquet amazon-athena fastparquet

我正在将使用csv的python项目(s3 + Athena)移植到镶木地板上。

我可以制作实木复合地板文件,可以通过Parquet View进行查看。

我可以将文件上传到s3存储桶。

我可以创建指向s3存储桶的Athena表。

但是,当我在Athena Web GUI上查询该表时,该表将运行10分钟(看来它将永远不会停止)并且没有显示结果。

整个项目很复杂。我试图简化这种情况。

1。假设我们有以下csv文件(test.csv)

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

2。然后,我使用以下python(2.7)代码将其转换为镶木地板文件(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查询表。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我们可以通过为给定的 s3 位置创建一个表来读取 athena 中的 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/* 目录具有以 SNAPPY 格式压缩的镶木地板文件。

可以在 this AWS 文档中找到更多详细信息。

答案 1 :(得分:0)

尝试使用“选择自”选项在S3存储桶中查看镶木地板数据。 如果可以,请使用Athena创建具有正确表列标题的镶木地板文件表。稍后预览表以查看内容。