先日AWS GlueでクローリングしたデータにAthenaでクエリを実行する機会がありました。
しかし思いのほかつまづいてしまい解決に時間がかかってしまったので
同様の問題で困っている方の参考になればと思い
発生した問題と解決方法についてまとめてみました。

システムの構成

今回は図のような構成でAthenaによるクエリを実行するケースを想定しています。

  1. S3上にcsvファイルを配置
  2. AWS Glueクローラーでデータをクローリング
  3. Athenaでクエリを実行
  4. 結果を別のS3バケットに保存

落とし穴1 フォーマットが異なるファイルを同一フォルダに配置するのはNG

AWS Glueクローラーを使用する際の重要な前提として、
クローリング対象のフォルダにはカラム構成が同一のcsvファイルのみを配置する必要があります


最初この辺りの内容を理解しておらず、
バツの画像のように異なるフォーマットのcsvファイルを同一フォルダに配置してしまい、
想定しない挙動が発生してしまいました。

何が起こるのか

クローリング完了後csvファイルごとにテーブルが作成されます。

その後「View data」から作成したテーブルに対して簡単なクエリを
実行できるのですが、結果なしになってしまいます。

ここで先ほどのテーブルの情報を見てみると
Locationに本来含まれないはずのファイル名が含まれてしまっていることが分かります。

カラム構成の異なるファイルを同一フォルダに配置することで
ロケーションの情報に問題が発生してクエリが適切に実行できなくなってしまいます。

日本語ファイルに関する補足

ちなみに日本語のファイルを使用した場合
テーブル名が文字化けしてしまう現象も確認できました。

先述した通り、クローリングの際は必ず同一カラム構成のファイルのみを
含むフォルダを指定するようにしましょう。

落とし穴2:クローリング対象変更時にIAMロールの更新を忘れる

開発を進める中でクローリング対象のフォルダを変更するケースが
あると思うのですが、この時にIAMロールの更新を忘れて詰まってしまいました。

具体的にAWS Glueを使ってS3上のファイルをクローリングする際には
S3の権限でGetObjectとPutObjectを許可する必要があります。

クローリング対象のフォルダを変更する際にはこちらの設定も
合わせて修正するように気をつけましょう。

何が起こるのか

ロール周りの設定が間違っているとクローリングは実施できるにもかかわらず
テーブルが作成されない現象が発生します。

StatusはCompletedになっているのにテーブルが作成されず、
さらに特にエラーも表示されないので原因の特定に時間がかかってしまいました。

まとめ

今回は初めてAthena/AWS Glueまわりを触った際に詰まった箇所についてまとめてみました。

  1. フォーマット混在の問題:同一フォルダ内に異なるフォーマットのcsvファイルを配置すると、
    テーブルは作成されるがクエリ結果が空になる
  2. IAMロール権限の問題:クローリング対象変更時にロール権限の更新を忘れると、
    クローリングは成功するがテーブルが作成されない

どちらの問題も明確なエラーメッセージが表示されないため、
原因の特定に時間がかかってしまいました。同じような問題でお困りの方の参考になれば幸いです!