首页 > 解决方案 > 如何在 AWS Athena 的查询中创建对已解析字段的引用?

问题描述

在此查询中,该time字段被解析parse_datetime2 次:

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只解析一次吗?

标签: prestoamazon-athena

解决方案


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

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

推荐阅读