Как стать автором
Обновить

Комментарии 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
;

костыли какието . не пойму в чем проблема перенести этот функционал из kafka stream в ksql ....

На сегодняшний день Apache Kafkaне без оснований часто признается лучшим продуктом на рынке систем по передаче данных. Но Kafka не только интересен в качестве брокера сообщений.

Регулярно встречаю подобное. Почему-то кафку причисляют с брокерам сообщений. Хотя кафка - это stream processing. Т.е. не просто переложить "что-то" из одного места в другое, а сделать с этим "что-то" некие, возможно, сложные манипуляции.

Добрый день. Увы, "чистая" Кафка не предназначена для сложных манипуляций с данными.

Это как раз про "переложить из одного места в другое", по этой причине ее и относят к брокерам сообщений. [https://ru.wikipedia.org/wiki/Apache_Kafka]. А вот библиотеки и продукты выросшие на основе Кафки действительно способны на сложные манипуляции.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий