我在S3中有个日期,通过它我创建了一个雅典娜表。我有一些json格式的S3日期条目,雅典娜在运行查询时不接受日期或时间戳记。
使用将Prestodb用作查询引擎的AWS Athena
示例json:
{"creationdate":"2018-09-12T15:49:07.269Z", "otherfield":"value1"} {"creationdate":"2018-09-12T15:49:07Z", "otherfield":"value2"}
AWS Glue将两个字段都当作字符串,并且分别将它们更改为时间戳和日期时,围绕时间戳的查询无法正常工作,在时间戳字段上给出ValidationError。
无论如何,我找到了一种使用prestodb date_parse函数的方法,但是它无法正常工作,因为某些字段有毫秒,而另一些字段没有毫秒。
parse_datetime(creationdate, '%Y-%m-%dT%H:%i:%s.%fZ') parse_datetime(creationdate, '%Y-%m-%dT%H:%i:%sZ')
由于出现的条目不同,两者均失败,即,其中一个条目包含毫秒级%f,而另一个条目不包含 有没有办法提供解析器,正则表达式,以便能够在执行SQL查询期间将这些字符串转换为Date?
答案 0 :(得分:2)
您可以使用from_iso8601_timestamp
函数来代替时间戳格式。
这样,所有时间戳都会被解析。
select from_iso8601_timestamp(creationdate) from table1;
答案 1 :(得分:0)
你只需要约会吗?
如果是这样,您可以使用date_parse(字符串,格式)。
date_parse(creationdate, ‘%Y-%m-%d’)
答案 2 :(得分:0)
使用此:
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');