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

最終更新日: 2020 年 11 月 17 日

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

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


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