将Athena时间戳转换为日期



我正在运行一个针对Athena的查询,它中断了。具体来说,我得到了以下片段的错误:

avg(
DATE_DIFF(
'minute',
CAST(from_iso8601_timestamp("sessions_staging".session_start_at) AS TIMESTAMP),
CASE
WHEN CAST("sessions_staging__end_raw" AS TIMESTAMP) + INTERVAL '1' MINUTE > CAST("sessions_staging".next_session_start_at AS TIMESTAMP) THEN CAST("sessions_staging".next_session_start_at AS TIMESTAMP)
ELSE CAST("sessions_staging__end_raw" AS TIMESTAMP) + INTERVAL '30' MINUTE
END
)
) "sessions_staging__average_duration_minutes"

雅典娜向Value cannot be cast to timestamp: 2022-08-03T00:05:54.300Z抱怨。

我尝试了很多技巧,比如把我的日期转换成字符串,然后再转换成时间或时间戳类型。由相同问题引起的类似问题包括在Athena 上转换为时区失败的时间戳

价值似乎还不错。我能够执行:SELECT CAST(From_iso8601_timestamp('2022-08-03T00:05:54.300Z') AS timestamp)。如果我不使用CAST(),只使用:"sessions_staging".session_start_at,它说(varchar(6), varchar, timestamp) for function date_diff,所以我知道session_start_at被认为是VARCHAR。然而,对于被描述为解决我的问题的铸造类型,在链接的讨论中,似乎需要使用SELECT。我尝试的所有操作,包括字符串操作都不起作用。

我如何重新编写我的查询/casts以供Athena处理我的请求?

日期(substr(时间戳_列,1,10((AS日期_列

我最终得到了:

CAST(DATE_PARSE(my_varchar_date, '%Y-%m-%dT%H:%i:%s.%f%z') AS TIMESTAMP)

最新更新