AWS Glueで作成したパーティションがAthenaで認識されない

小ネタ

AWS Glueで既存のテーブルに対して書き込む場合、

additionalOptions = {"enableUpdateCatalog": True}
write_dynamic_frame.from_catalog(他略, additional_options=additionalOptions)

を用いることで対応できるはずが、実際AthenaでSHOW PARTITIONSをしても認識できなかった。

一方で、Clawlerを用いることでパーティションを認識はできた。

そこで公式ドキュメントとの差分を調査。

結論

CREATE TABLE時のclassificationをglueparquetにする

今まではclassificationをparquetにしていたが、glueを使う場合glueparquetじゃないとスキーマが異なるため正しく認識されないらしい。。

作成例

CREATE EXTERNAL TABLE IF NOT EXISTS db_name.sample_table (
    id STRING,
)
PARTITIONED BY (log_date INT)
STORED AS PARQUET
LOCATION 's3://db_name/sample_table/'
TBLPROPERTIES (
    'classification'='glueparquet',
    'parquet.compress'='SNAPPY'
    )

もちろん、additionalOptions = {“enableUpdateCatalog”: True}もお忘れずに

コメント

タイトルとURLをコピーしました