presto - 如何在 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
只解析一次吗?
解决方案
根据 SQL 规范,WHERE
子句不能引用子句中的投影SELECT
,它只能引用FROM
.
WHERE
您可以在子句中完整地重复表达式:WHERE parse_datetime(...) BETWEEN ...
- 您可以将查询包装为子查询,如下所示:
SELECT *
FROM (
SELECT parse_datetime(....) as parsed_time, ...
FROM ...
)
WHERE parsed_time BETWEEN ...
推荐阅读
- c# - 如何在 Visual Studio 中引用两个程序集?
- javascript - 在 javascript 中使用 Promises 运行代码时出现问题
- jquery - jQuery选择下一个div元素
- machine-learning - Keras 损失在 epoch 结束时的变化
- react-native - 反应原生地图功能
- css - 如何删除 Google Chrome 中文本输入内的箭头?
- python - 需要帮助复制一些 itertools 功能
- angular - 将参数传递给 useFactory()
- c# - 回合结束后如何查看玩家的分数?
- javascript - 如何消除图像轮播上的延迟?