Amazon Athena のテーブルをクエリするときのタイムスタンプ例外を解決する方法を教えてください。

所要時間1分
0

Amazon Athena テーブルの TIMESTAMP データの列をクエリすると、例外が発生します。

簡単な説明

TIMESTAMP データを使用して Athena テーブルにクエリを実行すると、次のいずれかの例外が発生してクエリが失敗する可能性があります。

  • SYNTAX_ERROR: line '>' は timestamp、varchar(19) に適用できません。 クエリの TIMESTAMP 値と STRING 値の間に '>' などの論理演算子を使用すると、この例外が発生する可能性があります。
  • INVALID_CAST_ARGUMENT での cast(col as timestamp): Athena がサポートしていないデータ型の列にキャストを使用すると、この例外が発生する可能性があります。

解決方法

例外: SYNTAX_ERROR: line '>' は timestamp、varchar(19) に適用できません

テーブルの TIMESTAMP データの形式が間違っている可能性があります。Athena には Java TIMESTAMP 形式が必須です。Presto の日付と時刻の関数またはキャストを使用して、クエリフィルター条件の STRING を TIMESTAMP に変換します。詳細については、Presto ドキュメントの「日付と時刻の関数と演算子」を参照してください。

  1. 次のようなクエリを実行して、testdataset1 というテーブルを作成します。
CREATE TABLE testdataset1 AS SELECT testid1, testname1, date_parse(testtimestamp1,'%m/%d/%Y %h:%i:%s %p') AS testtimestamp1
FROM (
    VALUES
        (1, 'a','7/14/2020 8:22:39 AM'),
        (2, 'b','8/01/2015 10:22:39 PM'),
        (3, 'c','8/13/2017 4:22:39 AM')
) AS t(testid1, testname1, testtimestamp1)
  1. リテラル値にキャスト関数を使用してタイムスタンプフィルターを適用します (例: 2020-07-14 00:00:00):
SELECT * FROM testdataset WHERE testtimestamp1 < cast('2020-07-14 00:00:00' as timestamp)

例外: INVALID_CAST_ARGUMENT での cast(col as timestamp)

Presto の日付と時刻の関数を使用して、クエリ内の列を DATE または TIMESTAMP として読み取ります。

  1. 次のようなクエリを実行して、testdataset2 というテーブルを作成します。
CREATE TABLE testdataset2 AS SELECT * FROM
(VALUES
        (1, 'a','7/14/2020 8:22:39 AM'),
        (2, 'b','8/01/2015 10:22:39 PM'),
        (3, 'c','8/13/2017 4:22:39 AM')
) AS t(testid2, testname2, testtimestamp2)
  1. Presto の date_parse 関数を使用して、STRING TIMESTAMP 列 testtimestamp2 を JAVA TIMESTAMP 形式に変換します。
SELECT testid2,testname2,date_parse(testtimestamp2,'%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2

関連情報

Amazon Athena のテーブルにクエリを実行すると、TIMESTAMP の結果が空になるのはなぜですか?

AWS公式
AWS公式更新しました 3年前
コメントはありません