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

最終更新日: 2021 年 4 月 9 日

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

簡単な説明

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

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

解決方法

例外: SYNTAX_ERROR: line '>' cannot be applied to timestamp, varchar(19)

テーブル内の TIMESTAMP データの形式が正しくない可能性があります。Athena では、以下のように Java の TIMESTAMP 形式が必須になります。クエリフィルタ条件で STRING を TIMESTAMP に変換するには、Presto の日付と時刻関数またはキャストを使用します。詳細については、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)

2.    リテラル値にキャスト関数を使用してタイムスタンプフィルタを適用します (例: 2020-07-14 00:00:00)。

SELECT * FROM testdataset WHERE testtimestamp1 < cast('2020-07-14 00:00:00' as timestamp)

例外: cast(col as timestamp) with INVALID_CAST_ARGUMENT

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)

2.    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

この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?