首页 > 解决方案 > deprecated.legacy-timestamp 应该如何在 Presto 0.220 中工作?

问题描述

我遇到了正确读取时间戳的问题,在 EMR 上的 Presto 上没有任何自动转换。

示例:在 AWS Glue 目录中,我有一个表,其中包含 UTC 时间的时间戳列(数据类型时间戳)。在 Athena 中查询时,它们按预期返回。在 EMR 上的 Presto(EMR 5.26,Presto 0.220)中查询时,会自动转换到不同的时区。

Presto 文档在此处描述了一种禁用此行为的方法 - https://prestosql.io/docs/current/language/timestamp

The legacy semantics can be enabled using the deprecated.legacy-timestamp config property. Setting it to true (the default) enables the legacy semantics, whereas setting it to false enables the new semantics.

他们概述了他们的结果差异,此选项在底部设置为 true vs false

Query: SELECT TIME '10:00:00 Asia/Kathmandu' AT TIME ZONE 'UTC' Legacy result: 04:30:00.000 UTC New result: 04:15:00.000 UTC

在我的 EMR 配置中包含deprecated.legacy-timestamp设置后true(在 presto-config 中),我仍然根据此测试查询获得新结果,(并且我的 UTC 时间戳仍在自动转换中)。

关于我还需要做什么来启用遗留时间戳行为的任何建议?

标签: amazon-emrprestotrino

解决方案


遗留时间戳行为仍然是默认行为,您可以在https://github.com/prestosql/presto/issues/37跟踪当前状态。显然,Athena 会像 Presto 在使用 UTC 会话区域运行时那样评估时间戳。

从 Presto 317 开始,您可以使用配置属性强制客户端会话区域:

 sql.forced-session-time-zone=UTC

对于所有 Presto 版本,您可以设置客户端会话区域。如何执行此操作取决于使用的特定客户端。例如,presto-cli你通常会做

java -Duser.timezone=UTC -jar presto-cli.jar

推荐阅读