微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 Athena 中解析 UTC 日期

如何解决无法在 Athena 中解析 UTC 日期

我的日期字符串格式为:2019-02-18 09:17:31.260000+00:00,我正在尝试将其转换为 Athena 中的日期。

我尝试按照 SO 答案中的建议转换为时间戳,但失败了。 https://github.com/prestodb/presto/issues/10567 中有一个讨论,但没有对这种特定日期格式的回答。

我尝试了几种格式,如“YYYY-MM-dd HH:mm:ss.SSSSSSZ”,但不起作用并得到类似 INVALID_FUNCTION_ARGUMENT: Invalid format:...is malformed at "+00:00" 的错误。>

卡住了一段时间,感谢您的帮助!

解决方法

Athena 基于一个非常旧版本的 Presto,并且没有通过一些字符串操作技巧来做到这一点的直接方法。例如,您可以使用 regexp_replace 提取与时区类型的内置时间戳兼容的字符串部分,然后执行:

SELECT cast(regexp_replace('2019-02-18 09:17:31.260000+00:00','(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3})\d{3}(.*)','$1$2') AS timestamp with time zone)

最近版本的 Trino (formerly known as PrestoSQL) 引入了对精度高达纳秒精度(12 位小数)的可变精度时间类型的支持。

有了这个功能,你就可以:

trino> select cast('2019-02-18 09:17:31.260000+00:00' as timestamp(6) with time zone);
             _col0
--------------------------------
 2019-02-18 09:17:31.260000 UTC
(1 row)
,

Martin Traverso 答案的一个简短版本是将额外字符子串起来:

select cast(substr('2019-02-18 09:17:31.260000+00:00',1,23) as timestamp);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。