たまに触るAthenaで個人的にありがちな初歩的トラブルFAQ

個人的にAmazon Athenaをたまに触ったときにハマりやすい箇所についてまとめてみました。
2019.08.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

管理コンソールからAmazon Athenaでクエリを実行する時、MySQLでのクエリ実行に慣れていると一回で正常に実行できない時があります。

理解したはずが時間をおいて触るたびに躓くため、個人用備忘録としての用途も込めて書き起こしてみました。

Athenaにおけるリファレンス

とりあえず、ハマってしまった場合は無理にもがく前に以下のドキュメントへ目を通します。

DDL および SQL リファレンス - Amazon Athena

ただ、上記リファレンス以前に単純なトラブルで詰まるケースもあります。以下、個人的なハマりポイントを挙げてみます。

囲み文字のトラブル

create table user (
    name TEXT NOT NULL,
    id INT NOT NULL,
    mail TEXT NOT NULL,
    stage TEXT NULL)

例えば、上記のようなテーブルがあるとします。

以下のクエリを発行したとします。これはエラーになります。

select distinct(name) from user where stage = "mail_check"

Athenaでは、ダブルクオート(")で囲むとカラム名を指定したことになります。この場合は以下のように修正することで動作します。

select distinct(name) from user where stage = 'mail_check'

文字数超過

MySQLの場合はメモリ上限等の制約を引き上げる事で割と無茶気味なクエリも実行することができました。ですが、Athenaの場合は262144バイト(256KB)が上限になっています。

スクリプトで自動生成したWhere句過多のSQLを貼り付けたりするとあっさり引っかかる上限値のはずです。大まかにデータをひっぱった後に、細かく切り分けていく方法も検討すべきです。

あとがき

MySQLで組み立てたクエリをAthenaで実行しようとして失敗し、Athenaのsyntaxにてどの辺りが引っかかっているのかを調べるという手順を幾度か繰り返して、基本的にデータ比較にはMySQLでもシングルクオートを使うように習慣付けるのが無難だと実感しました。

SQLの構文的には問題なさそうにみえる場合は、囲い文字についてもよーく確認してみましょう。