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

所要時間1分
0

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) 関数の フォーマット を、データで使用されている TIMESTAMP のフォーマットにする必要があります。

入力データが次のような ISO 8601 フォーマットである場合

2020-11-14T02:34:48Z

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

SELECT from_iso8601_timestamp(ts) FROM timestamptestcsv3

関連情報

Amazon Athena のデータ型

AWS公式
AWS公式更新しました 2年前