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}もお忘れずに
コメント