为什么当在 Amazon Athena 中查询一个表时,TIMESTAMP 结果为空?

1 分钟阅读
0

当我在 Amazon Athena 表中查询 TIMESTAMP 数据列时,收到空结果或查询失败。数据在输入文件中。

简短描述

时间戳数据的格式可能错误。Athena 需要 Java 时间戳格式:

YYYY-MM-DD HH:MM:SS.fffffffff

要将时间戳数据更改为正确的格式:

  1. 将列定义为字符串。
  2. 使用 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 中的数据类型

AWS 官方
AWS 官方已更新 2 年前