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

最終更新日: 2022 年 8 月 25 日

Amazon Athena テーブルで TIMESTAMP データの列にクエリを実行すると、空の結果が返されるか、クエリが失敗します。データは入力ファイル内に存在しています。

簡単な説明

TIMESTAMP データの形式が正しくない可能性があります。Athena では、以下のように Java の TIMESTAMP 形式が必須になります。

YYYY-MM-DD HH:MM:SS.fffffffff

TIMESTAMP データを正しい形式に変更するには、次の手順に従ってください。

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

解決方法

列を STRING として定義する

以下のようなコマンドを使用します。

CREATE EXTERNAL TABLE 'test' ('ts' STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
LOCATION 's3://doc-example-bucket/path-to-data/'

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

入力データが以下の形式の場合

20200921T015005
20200923T095605

次に、以下の例に示すように、date_parse 関数を使用します。

SELECT date_parse(ts,'%Y%m%dT%h%i%s') FROM timestamptestcsv3

注: date_parse(string,format) 関数の format は、データで使用されている TIMESTAMP 形式にする必要があります。詳細については、Presto ドキュメントの「MySQL 日付関数」を参照してください。

入力データが以下のように ISO 8601 形式である場合

2020-11-14T02:34:48Z

次に、from_iso8601_timestamp() 関数を使用して、ts フィールドを TIMESTAMP として読み取ります。例:

SELECT from_iso8601_timestamp(ts) FROM timestamptestcsv3

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


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