amazon-emr - 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 时间戳仍在自动转换中)。
关于我还需要做什么来启用遗留时间戳行为的任何建议?
解决方案
遗留时间戳行为仍然是默认行为,您可以在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
推荐阅读
- r - 在 R 中创建一个与旧数据集具有相同属性(均值、偏斜、库尔特、产品)的新数据集
- ocaml - 我如何让沙丘执行 shell 命令作为库的依赖项
- python-3.x - 如何使用 df.iloc[] 切片在 DF 中提取和合并 2 个不同的列切片并设置为变量?
- compilation - 有 Rust 解释器吗?
- node.js - Messenger Broadcast API 未向具有开发应用程序角色的用户发送消息
- llvm - 使用 LLVM 进行整数溢出捕获?
- dart - 有没有办法同时运行多个标签?就像,他们所有的```initState```一起
- javascript - 正则表达式性能:交替与特里
- ios - 自定义 Swift Search 图标,可打开搜索栏覆盖
- systemd - rsyslog 配置以合并来自 imuxsock 的多行