AWS Glue にてStruct型でハマったポイントについて解説しておきたいと思います。
クローラー
クローラーの設定で項目が追加してもデータカタログを更新してくれる機能がありますが、Struct型の中身が違う場合は機能しませんでした。
Athena
AthenaでもStruct型の中身がスキーマとパーティションで違うデータがある場合にエラーとなりました。
ジョブ
上記のようなデータはStruct型ではなく、String型とするしかなかったのでString型にしたのですが、Struct型はDynamicFrameを通すと自動的にStruct型に変換されてしまいます。これを元に戻す為には、DynamicFrameを通した後に、ApplyMappingで型を変換してあげる必要がありました。
1 2 3 4 5 6 7 8 9 10 11 12 |
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") ] ) |
以上です。