当在 Amazon Athena 中查询表时,时间戳结果为空

上次更新时间:2020 年 11 月 17 日

当我在 Amazon Athena 表中查询时间戳数据列时,收到空结果或查询失败。数据在输入文件中。如何解决此问题?

简短描述

时间戳数据的格式可能错误。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 必须是数据中使用的时间戳格式。有关更多信息,请参阅 Presto 文档中的 MySQL 日期函数

如果您的输入数据采用 ISO 8601 格式,请执行以下操作:

2020-11-14T02:34:48Z

然后,使用 from_iso8601_timestamp() 函数将 ts 字段读取为时间戳。示例:

SELECT from_iso8601_timestamp(ts) FROM timestamptestcsv3

这篇文章对您有帮助吗?


您是否需要账单或技术支持?