Рассмотрим следующее предназначено sql:
select row_number()
over (partition by Origin order by OnTimeDepPct desc) OnTimeDepRank,*
from flights
Это будет не работать в структурированной потоковой передаче - как показано в следующем вопросе Spark - не потоковые окна не поддерживаются при потоковой передаче данных. Фреймы данных / наборы данных; моим собственным ответом на этот вопрос: https://stackoverflow.com/a/55777253/1056563
Виновник:
partition by Origin
Требуется использовать поле типа отметки времени, например
partition by flightTime
Это требование исходит из определенного источника (основной коммиттер для потоковой передачи с искрой ), указывающий, что поддерживаются агрегации на основе timestamp . Синтаксис в этом случае использует window
:
window("timestamp", "10 minutes")`
На самом деле есть дополнительное осложнение: Структурированная потоковая передача не поддерживает коррелированные подзапросы . Поэтому обычно полезные ответы от уважаемого Гордона Линоффа здесь: https://stackoverflow.com/a/46856508/1056563 не могут быть применены
Что тогда для моего запроса выше - какой должен быть основан на поле Origin ? Что является наиболее близким эквивалентом этого запроса? Или какой может быть обходной путь или другой подход для достижения тех же результатов?