AWS Glue Crawlerで複数csvから一括でデータカタログを作ったときにデータが空になったときの対処法
結論
csvをまとめてクロールする場合は構造別にフォルダを分けてやる必要があります。
概要
複数のcsvデータをまとめてデータカタログ化する。
以下のサンプルデータをまとめてクロールしてAthenaで見れるところまでやります。
サンプルデータ
"user_id","name"
1,"hoge taro"
2,"hoge jiro"
3,"hoge sanro"
"user_id","image_url"
1,"https://hoge_taro_image.jpg"
2,"https://hoge_jiro_image.jpg"
3,"https://hoge_sanro_image.jpg"
空データの再現
サンプルデータを配置するS3バケットパスはS3://sample/inputとしておきます。
S3://sample/input/user.csv
S3://sample/input/user_image.csv
一見S3://sample/inputをクロールすれば問題なさそうですね。
しかしテーブルとスキーマは正しいのにデータが空の状態になります。
対策
この現象はAWS Knowledge Centerで解説されています。
Data for multiple tables stored in the same S3 prefixの項目
説明通りに各構造でフォルダ分けします。
S3://sample/input/user/user.csv
S3://sample/input/user_image/user_image.csv
これでS3://sample/inputを再度クロールすることで無事にデータを確認できました。
おまけ1
csvの数が多くなると手動でのフォルダ分けは面倒になります。
AWS Glue ETL Jobを使った自動フォルダ分けを追々紹介します。
おまけ2
このままだとデータにダブルクォーテーションが付いているため扱いづらいです。
データのみ抽出する方法を追々紹介します。