如何在 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 ...
在此查询中,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 ...