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

问题描述 投票:1回答:2

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

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

presto amazon-athena
2个回答
2
投票

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

  • 您可以在WHERE子句中完全重复该表达式:WHERE parse_datetime(...) BETWEEN ...
  • 您可以将查询包装为子查询,如下所示:
SELECT *
FROM (
  SELECT parse_datetime(....) as parsed_time, ...
  FROM ...
)
WHERE parsed_time BETWEEN ...

0
投票

我无法发表评论,我写这是答案,因为我的分数还不够。您可以像这样更改它并尝试吗?;

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'
© www.soinside.com 2019 - 2024. All rights reserved.