Amazon Athena テーブルで TIMESTAMP データの列にクエリを実行すると、空の結果が返されるか、クエリが失敗します。データは入力ファイル内に存在しています。
簡単な説明
TIMESTAMP データの形式が正しくない可能性があります。Athena では、以下のように Java の TIMESTAMP 形式が必須になります。
YYYY-MM-DD HH:MM:SS.fffffffff
TIMESTAMP データを正しい形式に変更するには、次の手順に従ってください。
- 列を STRING として定義します。
- 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 のデータ型