Чем отличаются GROUP BY и OVER WINDOW в Flink SQL? - PullRequest
1 голос
/ 27 мая 2020

Можно использовать windows в Flink двумя разными способами

SELECT key, MAX(value)
  FROM table
 GROUP BY key, TUMBLE(ts, INTERVAL '5' MINUTE)

и

SELECT key, MAX(value) OVER w
  FROM table
 WINDOW w AS (PARTITION BY key ORDER BY ts ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

Интересно, могут ли эти два механизма express одно и то же или что за основное отличие и возможные варианты использования для обоих?

1 Ответ

1 голос
/ 28 мая 2020

Оба запроса вычисляют разные результаты, которые соответствуют семантике обычного SQL. Таким образом, разница заключается не в специфике Flink c, а в стандарте SQL Standard.


Первый запрос

SELECT key, MAX(value)
  FROM table
 GROUP BY key, TUMBLE(ts, INTERVAL '5' MINUTE)

группирует записи на key и 5-минутные сегменты . Каждые 5 минут запрос создает одну строку для каждого значения key с максимальным значением value. Для каждой группы несколько строк объединяются в одну строку.


Второй запрос

SELECT key, MAX(value) OVER w
  FROM table
 WINDOW w AS (PARTITION BY key ORDER BY ts ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

производит по одной строке для каждой строки ввода (table). Строка результата имеет максимальное значение value для значения key, которое наблюдалось до сих пор (строки упорядочены по ts). Обратите внимание, что несколько строк не объединяются в одну; каждая входная строка приводит к одной выходной строке. Причем диапазон максимальной агрегации может составлять более 5 минут. Фактически, в этом примере это весь раздел key.

...