質問・問題
Amazon Athena テーブルの timestamp 型 や date 型のカラムを下記クエリで検索すると「TYPE_MISMATCH」エラーが発生します。
原因と対処方法を教えてください。
▼クエリ 1
select カラム名
from テーブル名
where timestamp 型のカラム >= '2024-01-01 00:00:00.000'
▼クエリ 2
select カラム名
from テーブル名
where date 型のカラム >= '2024-01-01 00:00:00.000'
▼エラーメッセージ
TYPE_MISMATCH: line XX:XX: Cannot apply operator: timestamp(XX) = varchar(XX)
※「XX」は実行するクエリに関する数字が出力されます。
回答・解決方法
'2024-01-01 00:00:00.000' のように文字列をシングルクォーテーションで囲う形にしても、Amazon Athena のエンジンで使用されている Trino(旧 Presto) ではタイムスタンプや日付として扱わず、そのまま varchar 型として使用されます。
そのため、以下のように型変換 (cast) が必要となります。
▼例
select カラム名
from テーブル名
where timestamp 型のカラム >= cast('2024-01-01 00:00:00.000' as timestamp)
■ 参考ドキュメント
[1] Amazon Athena のテーブルをクエリするときのタイムスタンプ例外を解決する方法を教えてください。
https://repost.aws/ja/knowledge-center/athena-table-timestamp-exceptions
=== 抜粋 ===
リテラル値にキャスト関数を使用してタイムスタンプフィルターを適用します (例: 2020-07-14 00:00:00):
SELECT * FROM testdataset WHERE testtimestamp1 < cast('2020-07-14 00:00:00' as timestamp)
=========
[2] Amazon Athena のデータ型 - タイムスタンプデータの使用
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/data-types.html#data-types-timestamps