apache-flink - 在 Flink SQL 流中的“Group Aggregation”子查询之后使用“Over Aggregation”
问题描述
我正在使用链接中的数据:https ://github.com/ververica/sql-training/wiki/Setting-up-the-Training-Environment我想在 30 分钟的窗口中找到前 10 条最频繁的路线.
首先,我按路线计算了游乐设施(团体聚合):
SELECT
T1.Starting_areaId,
T1.Ending_areaId,
TUMBLE_END(T1.matchTime, INTERVAL '30' MINUTE) AS End_Time,
COUNT(T1.Starting_areaId) AS No_Rides
FROM (
SELECT * FROM Rides
MATCH_RECOGNIZE(
PARTITION BY taxiId, rideId
ORDER BY rideTime
MEASURES
toAreaId(P.lon, P.lat) AS Starting_areaId,
toAreaId(D.lon, D.lat) AS Ending_areaId,
MATCH_ROWTIME() AS matchTime
AFTER MATCH SKIP PAST LAST ROW
PATTERN(P D)
DEFINE
P AS P.isStart = true,
D AS D.isStart = false
)
) AS T1
GROUP BY
T1.Starting_areaId,
T1.Ending_areaId,
TUMBLE(T1.matchTime, INTERVAL '30' MINUTE)
但是,当我尝试使用 (Over Aggregation) 通过以下查询按路线排列游乐设施数量时:
SELECT
T2.Starting_areaId,
T2.Ending_areaId,
T2.End_Time,
T2.No_Rides,
RANK() OVER(
PARTITION BY T2.End_Time
ORDER BY T2.No_Rides
) AS Ranking
FROM (
SELECT
T1.Starting_areaId,
T1.Ending_areaId,
TUMBLE_END(T1.matchTime, INTERVAL '30' MINUTE) AS End_Time,
COUNT(T1.Starting_areaId) AS No_Rides
FROM (
SELECT * FROM Rides
MATCH_RECOGNIZE(
PARTITION BY taxiId, rideId
ORDER BY rideTime
MEASURES
toAreaId(P.lon, P.lat) AS Starting_areaId,
toAreaId(D.lon, D.lat) AS Ending_areaId,
MATCH_ROWTIME() AS matchTime
AFTER MATCH SKIP PAST LAST ROW
PATTERN(P D)
DEFINE
P AS P.isStart = true,
D AS D.isStart = false
)
) AS T1
GROUP BY
T1.Starting_areaId,
T1.Ending_areaId,
TUMBLE(T1.matchTime, INTERVAL '30' MINUTE)
) AS T2
我面临这个错误:
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.api.TableException: OVER windows' ordering in stream mode must be defined on a time attribute.
解决方案
推荐阅读
- sql - 当时间范围在两天之间时如何获取特定时间范围内的记录
- python - 给定一个非空整数数组 nums,每个元素出现两次,除了一个。找到那个单一的
- ansible - 引号的 Anisble Yaml 文件格式
- html - 动画网格列:强制到屏幕边框
- c++ - 为自定义 PyTorch 激活函数启动正确数量的 CUDA 块
- xamarin - 为什么我在 iOS 中的 PhoneDialer.Open 中出现 FeatureNotSupported 异常,但在 Xamarin Forms 中的 Android 中工作正常?
- php - 如何在 Codeigniter 中获取特定的行数据
- wpf - 为 Web-API 和 WPF 客户端 APP 使用一个 AAD 应用注册
- python - 如何删除不在另一个数据框中的数据框行?
- python - 如何在 python manage.py 的 bash 脚本中输入提示