PARTITION BY с TUMBLE вызывает исключение в FlinkSQL - PullRequest
0 голосов
/ 29 мая 2020

Я хочу выбрать последний элемент окна обработки с помощью Flink SQL. Пытался добиться этого с помощью ROW_NUMBER в планировщике Blink. Пробовал следующий запрос:

SELECT * FROM (
  SELECT key, value, ROW_NUMBER() OVER w AS rn
    FROM InputTable
  WINDOW w AS (PARTITION BY key, TUMBLE(rt, INTERVAL '15' MINUTE) ORDER BY -ts)
) WHERE rn = 1

// rt = ts.rowtime, ts is Long

К сожалению, это вызывает исключение

org.apache.flink.table.planner.codegen.CodeGenException: Unsupported call: TUMBLE(TIMESTAMP(3) *ROWTIME*, INTERVAL SECOND(3) NOT NULL) 
If you think this function should be supported, you can create an issue and start a discussion for it.

Есть идеи, что я делаю не так? Я думал о функции TUMBLE как о чем-то «эквивалентном» вычислению rowtime % interval.

1 Ответ

0 голосов
/ 03 июня 2020

TUMBLE (а также HOP и SESSION) - это специальные встроенные функции в Flink SQL (версия 2.11), которые могут использоваться только в предложении GROUP BY. В принципе, вы правы, и в этом контексте должно быть нормально использовать TUMBLE, но на данный момент это просто не поддерживается.

Вы можете реализовать определяемую пользователем функцию для повторной реализации группировки logi c из TUMBLE, однако я бы не рекомендовал это, потому что запрос не будет работать должным образом. Flink SQL не будет знать, что раздел (PARTITION BY key, TUMBLE(rt, INTERVAL '15' MINUTE) будет «активным» только 35 минут и сохранит свое состояние навсегда. Следовательно, со временем запрос будет накапливать все больше и больше состояний, что замедляет создание контрольных точек и восстановление. IMO, такие временные разделы OVER должны поддерживаться в будущем, но, AFAIK, их еще нет.

...