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://<your-bucket>/<path-to-data>/'

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

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

20170621T015005
20170723T095605

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

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

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

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

2018-12-24T02:34:48Z

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

SELECT from_iso8601_timestamp(ts) FROM timestamptestcsv3

このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2018 年 8 月 8 日

更新日: 2019 年 1 月 17 日