KSQL Hopping Window: доступ только к самому старому подокну

Я отслеживаю скользящую сумму определенного поля с помощью запроса, который выглядит примерно так:

SELECT id, SUM(quantity) AS quantity from stream \
WINDOW HOPPING (SIZE 1 MINUTE, ADVANCE BY 10 SECONDS) \
GROUP BY id;

Теперь, по-видимому, для каждого входного тика мне возвращаются 6 различных агрегированных значений, которые относятся к следующим периодам времени:

[start, start+60] seconds
[start+10, start+60] seconds
[start+20, start+60] seconds
[start+30, start+60] seconds
[start+40, start+60] seconds
[start+50, start+60] seconds

Что, если мне интересно, это получить только результат [старт, старт +60] секунд для каждого входящего тика. Есть ли способ получить ТОЛЬКО это?

1 ответ

Поскольку вы указываете скачкообразное окно, каждая запись попадает в несколько окон, и все окна должны быть обновлены при обработке записи. Обновление только одного окна будет некорректным, а результат будет неверным.

Сравните документы Kafka Streams о скачкообразном изменении окон (Kafka Streams - это внутренний механизм времени выполнения KSQL): https://docs.confluent.io/current/streams/developer-guide/dsl-api.html

Я был в аналогичной ситуации, и создание определяемой пользователем функции для доступа только к окну с помощью collect_list(column).size() = window duration кажется многообещающим.

В udf используйте тип List, чтобы получить один из ваших сводных базовых списков значений столбцов. Затем оцените, равен ли размер сформированного списка периоду окна переключения, в противном случае верните ноль.

Из этого создайте таблицу, выбирая данные и преобразуя их с помощью udf.

Создайте таблицу из этой последней таблицы и отфильтруйте нулевые значения в преобразованном столбце.

Другие вопросы по тегам