如何在 AWS Athena 的查询中创建对已解析字段的引用?

How to create a reference to a parsed field in a query in AWS Athena?

在此查询中,time 字段被 parse_datetime 解析了 2 次:

SELECT
  date_trunc('HOUR', parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z')),
  *
FROM
  logs
WHERE
  parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') BETWEEN timestamp '2020-05-14 19:00' AND timestamp '2020-05-14 23:59'

我试过了,但没用:

SELECT
  parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') as parsed_time,
  date_trunc('HOUR', parsed_time),
  *
FROM
  logs
WHERE
  parsed_time BETWEEN timestamp '2020-05-14 19:00' AND timestamp '2020-05-14 23:59'

可以只解析一次time吗?

无法发表评论,因为我的分数不够,我写了一个答案。你能这样改一下试试吗?;

SELECT
 parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') as parsed_time,
 logs.*
FROM
 logs
HAVING parsed_time BETWEEN timestamp '2020-05-14 19:00' AND timestamp '2020-05-14 23:59'

根据 SQL 规范,WHERE 子句不能引用 SELECT 子句中的投影,它只能引用 FROM 提供的列。

  • 您可以在 WHERE 子句中完整地重复表达式:WHERE parse_datetime(...) BETWEEN ...
  • 您可以像这样将查询包装为子查询:
SELECT *
FROM (
  SELECT parse_datetime(....) as parsed_time, ...
  FROM ...
)
WHERE parsed_time BETWEEN ...