Athena date_parse for date with optional millisecond field

问题描述 投票:0回答:3

我在 S3 中有日期,我使用它创建了一个 Athena 表。我在 S3 中有一些 json 格式的日期条目,在运行查询时 Athena 不接受这些日期或时间戳。

使用使用 Prestodb 作为查询引擎的 AWS Athena

示例 json:


    {“创建日期”:“2018-09-12T15:49:07.269Z”,“otherfield”:“value1”}
    {“创建日期”:“2018-09-12T15:49:07Z”,“其他领域”:“value2”}

AWS Glue 将这两个字段都作为字符串,当我分别将它们更改为时间戳和日期时,围绕时间戳的查询不起作用,在时间戳字段上给出 ValidationError。

无论如何,我找到了一种使用 prestodb date_parse 函数的方法,但它也不起作用,因为某些字段有毫秒而其他字段没有。


    parse_datetime(创建日期,'%Y-%m-%dT%H:%i:%s.%fZ')
    parse_datetime(创建日期,'%Y-%m-%dT%H:%i:%sZ')

两者都失败了,因为存在不同的条目,即一个有毫秒 %f,一个没有 有没有办法提供解析器,正则表达式,以便能够在执行 sql 查询期间将这些字符串转换为日期?

sql amazon-web-services amazon-athena presto
3个回答
16
投票

您可以使用

from_iso8601_timestamp
函数代替提供时间戳格式。

这样,所有时间戳都会被解析。

select from_iso8601_timestamp(creationdate) from table1;

-3
投票

你只是需要约会吗?

如果是这样,您可以使用 date_parse(string, format)。

date_parse(creationdate, ‘%Y-%m-%d’)

-3
投票

使用这个:

SELECT requestdatetime, remoteip, requester, key
       FROM MYDB.TABLE
       WHERE parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') 
       BETWEEN parse_datetime('2020-10-14:00:00:00','yyyy-MM-dd:HH:mm:ss')
           AND parse_datetime('2020-10-14:23:59:59','yyyy-MM-dd:HH:mm:ss');
© www.soinside.com 2019 - 2024. All rights reserved.