当我在 Amazon Athena 表中查询 TIMESTAMP 数据列时,收到空结果或查询失败。数据在输入文件中。
简短描述
时间戳数据的格式可能错误。Athena 需要 Java 时间戳格式:
YYYY-MM-DD HH:MM:SS.fffffffff
要将时间戳数据更改为正确的格式:
- 将列定义为字符串。
- 使用 Presto 的日期和时间函数将查询中的列读取为日期或时间戳。
解决方法
将列定义为字符串
运行类似于下面的命令:
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 的日期和时间函数将查询中的列读取为日期或时间戳
如果您的输入数据采用以下格式:
20200921T015005
20200923T095605
然后,使用 date_parse 函数,如以下示例所示:
SELECT date_parse(ts,'%Y%m%dT%h%i%s') FROM timestamptestcsv3
**注意:**date_parse(string,format) 函数中的 format 必须是数据中使用的 TIMESTAMP 格式。
如果您的输入数据采用 ISO 8601 格式,请执行以下操作:
2020-11-14T02:34:48Z
然后,使用 from_iso8601_timestamp() 函数将 ts 字段读取为时间戳。示例:
SELECT from_iso8601_timestamp(ts) FROM timestamptestcsv3
相关信息
Amazon Athena 中的数据类型