Использование ROW_NUMBER с Flink SQL

Я пытаюсь запустить следующий оператор SQL на Flink версии 1.10

select startAreaID, endAreaID 
from (
select startAreaID, endAreaID, 
ROW_NUMBER() OVER (ORDER BY cnt DESC ) as row_num
from (
select startAreaID, endAreaID, count(1) as cnt

from
(
select * from Rides
Match_Recognize
(
PARTITION BY taxiId
Order by rideTime
MEASURES
toAreaId(S.lon, S.lat) as startAreaID,
toAreaId(E.lon, E.lat) as endAreaID,
MATCH_ROWTIME() as matchTime
AFTER MATCH SKIP PAST LAST ROW
PATTERN (S E) 
DEFINE
S AS S.isStart=True,
E AS E.isStart=False
)) as routes
group by startAreaID,endAreaID, tumble(matchTime, interval '30' minute)
) as wins
)
where row_num <= 10;

Я получаю сообщение об ошибке [ERROR] Не удалось выполнить инструкцию SQL. Причина: org.apache.flink.table.api.TableException: у этого вычисления нет полезной проекции и нет фильтра. Его следует удалить с помощью CalcRemoveRule.

Я хотел бы помочь определить, что не так в заявлении. Это слишком сложно? Следует ли регистрировать промежуточные результаты как просмотры?

ПРИМЕЧАНИЕ. Данные считываются из источника поездок Kafka со схемой.

rideId: BIGINT taxiId: BIGINT isStart: BOOLEAN lon: FLOAT lat: FLOAT rideTime: TIMESTAMP (3) ROWTIME psgCnt: INT


person Ahmed Awad    schedule 17.05.2020    source источник


Ответы (1)


Странная уловка решила проблему.

Я добавил следующее предложение where после имен внутренних операторов select "wins".

`` где 1 = 1```

Я нашел этот трюк по этой ссылке https://issues.apache.org/jira/browse/FLINK-17022

person Ahmed Awad    schedule 18.05.2020