AthenaでCAST関数を利用する機会が増えた


昨年からAWSを触る機会が増えて、今年に入ってから初めてAthenaを使いました。

Athenaの環境でPrestoに触れてからというもの、標準SQLでクエリーを記述している頃に比べるとエラーの発生頻度が増えた気がする。。

もしかしたら、私と同じように困っている人がいるのでは?と思い、今回投稿してみることにしました。

例えば、至ってシンプルな下記テーブル情報が存在しているとします。

データベース:test
テーブル:test_table
カラム:test_code,test_name,test_date

Athenaを含めた、他のRDB上で下記クエリーを実行すると、全カラムを全件出力して正常終了します。

SELECT * FROM test.test_table;

しかし、Athenaでtest_table.test_code内に存在する111という情報を取り出そうとすると・・・

SELECT *
FROM   test.test_table
WHERE  test_table.test_code = 111;

「SYNTAX_ERROR: line~」から始まるエラーが返ってきました。でも、レコードに111は存在しています。。。

Google先生を頼りに調べてみたところ、どうやらAthenaではCAST関数を用いて、型変換しなければ上手くいかないケースが多い事を知りました。

データの型については、コチラのページを参考にしました。

※ついでにCASTしてからSUBSTRで指定した文字列を返すケースも書いてあるので助かりました。

そういうわけで、CAST関数を用いて型変換を行ってみたら・・・すんなりと実行結果が戻ってきました。

SELECT *
FROM   test.test_table
WHERE  cast(test_table.test_code as integer) = 111

もし、私と同じような目に合った方がいたら参考にしてみてください。