昨年から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
もし、私と同じような目に合った方がいたら参考にしてみてください。