AWS Glue にてStruct型でハマったポイントについて解説しておきたいと思います。
クローラー
クローラーの設定で項目が追加してもデータカタログを更新してくれる機能がありますが、Struct型の中身が違う場合は機能しませんでした。
Athena
AthenaでもStruct型の中身がスキーマとパーティションで違うデータがある場合にエラーとなりました。
ジョブ
上記のようなデータはStruct型ではなく、String型とするしかなかったのでString型にしたのですが、Struct型はDynamicFrameを通すと自動的にStruct型に変換されてしまいます。これを元に戻す為には、DynamicFrameを通した後に、ApplyMappingで型を変換してあげる必要がありました。
datasource = glueContext.create_dynamic_frame.from_catalog(
database = "hoge_database",
table_name = "hoge_table",
transformation_ctx = "datasource"
)
applymapping = ApplyMapping.appy(
frame= datasource,
mappings = [
("hoge", "string", "hoge", "string")
]
)
以上です。