如何在AWS Athena中使用表字段动态转换时区?
问题原因
AWS Athena 遵循 Presto 语法规范,AT TIME ZONE 语法仅支持后面跟硬编码的时区字符串常量,不支持传入表中的动态字段值,这是你替换成字段后触发语法错误的根因。
解决方案
直接使用 Athena 内置的 at_timezone() 函数即可实现动态时区转换,该函数支持两个参数:第一个是待转换的 datetime 类型字段,第二个是动态时区字段(值需为 IANA 标准时区格式,比如 Asia/Shanghai、America/Los_Angeles)。
单表场景改写示例
你原有报错的SQL:
SELECT (my_date_time) AT TIME ZONE my_timezone AS converted_time FROM table_one;
改写后可正常运行的版本:
SELECT at_timezone(my_date_time, my_timezone) AS converted_time FROM table_one;
多表关联场景示例
如果时区字段存储在关联表中,可参考如下写法:
WITH dataset (t, tz) AS ( SELECT table_one.my_date_time, table_two.timezone FROM table_one LEFT JOIN table_two ON table_one.id = table_two.table_one_id ) SELECT t, tz, at_timezone(t, tz) AS converted_time FROM dataset
注意:时区字段的值必须是标准的 IANA 时区标识符,若存储的是 UTC 偏移量(比如
+08:00)也可正常兼容,不要使用CST这类存在歧义的时区缩写,避免转换结果出错。
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

