Насколько я понимаю, таблицы K SQL показывают, что они показывают наши данные в виде « как есть », а не всех данных. Поэтому, если у меня есть простой агрегатный запрос и я ВЫБИРАЮ из своей таблицы, я должен видеть данные такими, какие они есть на данный момент.
Мои данные (поток):
MY_TOPIC_STREAM:
15 | BEACH | Steven Ebb | over there
24 | CIRCUS | John Doe | an adress
30 | CIRCUS | Alice Small | another address
35 | CIRCUS | Barry Share | a home
35 | CIRCUS | Garry Share | a home
40 | CIRCUS | John Mee | somewhere
45 | CIRCUS | David Three | a place
45 | CIRCUS | Mary Three | a place
45 | CIRCUS | Joffrey Three | a place
Определение моей таблицы:
CREATE TABLE MY_TABLE WITH (VALUE_FORMAT='AVRO') AS
SELECT ROWKEY AS APPLICATION, COUNT(*) AS NUM_APPLICANTS
FROM MY_TOPIC_STREAM
WHERE header->eventType = 'CIRCUS'
GROUP BY ROWKEY;
Я не понимаю, почему я вижу несколько строк в моей таблице, даже если возможные агрегаты верны?
SELECT * FROM MY_TABLE;
APPLICATION NUM_APPLICANTS
24 1
30 1
--> 35 1 <-- why do I see this?
35 2
40 1
--> 45 1 <-- why do I see this?
--> 45 2 <-- why do I see this?
45 3
Моя раковина topi c также показывает мне то же самое, что и вывод таблицы - предположительно, это правильно?
Я ожидал, что результат моей таблицы будет:
APPLICATION NUM_APPLICANTS
24 1
30 1
35 2
40 1
45 3
Выводы сокращены для краткости и удобочитаемости выше, но вы понимаете суть.
Итак, мои ожидания таблицы и раковины topi c выходят не на должном уровне?
UPDATE Ответ Матиаса ниже правильно объясняет, что таблица и раковина topi c показывают события журнала изменений, поэтому это нормально увидеть промежуточные значения. Однако меня смущало то, что я видел все промежуточные строки. Оказалось, что это произошло потому, что я использовал конфлюэнтную комбинацию 5.2.1 docker -compose, которая устанавливает переменную окружения KSQL_STREAMS_CACHE_MAX_BYTES_BUFFERING=0
. Это отключает кеширование всех промежуточных результатов в агрегатах K SQL, и поэтому в таблице отображается больше строк, чем ожидалось, но в конечном итоге достигается правильные агрегаты. При установке, например, 10 МБ данные будут выводиться, как и ожидалось. Эта функция не сразу очевидна в документации для тех, кто начинает играть с K SQL и использует docker для защиты от инстансов! Эта проблема указала мне правильное направление, и эта страница документирует параметры. Я потратил на это много времени и не мог понять, почему он не работает так, как ожидалось! Надеюсь, это кому-то поможет.