Комментарии 5
Добрый день. в ksql появилась или нет фича - посылать только финальный результат агрегации окна?
Добрый день.
Действительно результатом агрегации (см. пример) будет не одна строка, а несколько. Причина такого поведения состоит в том, что в каждом временном диапазоне свой результат агрегации
SELECT max(age) as max_age
FROM str_persons0
WINDOW SESSION (5 MINUTES)
GROUP BY 1
EMIT CHANGES
;
Если вы хотите получить максимум только за последний временной промежуток, то можно либо применить дополнительный фильтр WHERE rowtime BETWEEN ... либо перенаправить результат стрима в новый топик (см. ниже) по которому уже можно будет сделать соответствующую выборку.
CREATE OR REPLACE TABLE strmax_persons
AS SELECT 1 as id
, max(age) as max_age
, max(rowtime) AS rt_dt
FROM str_persons
WINDOW TUMBLING (SIZE 5 MINUTES)
GROUP BY 1
EMIT CHANGES
;
CREATE OR REPLACE STREAM str_persons1 (
id BIGINT
, max_age INT
, rt_dt BIGINT
) WITH (
KAFKA_TOPIC = 'STRMAX_PERSONS'
, VALUE_FORMAT = 'JSON'
);
SELECT LATEST_BY_OFFSET(max_age)
FROM str_persons1
GROUP BY 1 EMIT CHANGES
LIMIT 1
;
На сегодняшний день Apache Kafkaне без оснований часто признается лучшим продуктом на рынке систем по передаче данных. Но Kafka не только интересен в качестве брокера сообщений.
Регулярно встречаю подобное. Почему-то кафку причисляют с брокерам сообщений. Хотя кафка - это stream processing. Т.е. не просто переложить "что-то" из одного места в другое, а сделать с этим "что-то" некие, возможно, сложные манипуляции.
Добрый день. Увы, "чистая" Кафка не предназначена для сложных манипуляций с данными.
Это как раз про "переложить из одного места в другое", по этой причине ее и относят к брокерам сообщений. [https://ru.wikipedia.org/wiki/Apache_Kafka]. А вот библиотеки и продукты выросшие на основе Кафки действительно способны на сложные манипуляции.
ksqlDb или SQL как инструмент обработки потоков данных