Подсчет всех записей с KSQL

Можно ли использовать KSQL не только для подсчета записей определенного столбца через GROUP BY но вместо этого получить совокупность по всем записям, которые проходят через приложение?

Я ищу что-то вроде этого:

| Count all | Count id1 | count id2 |
| ---245----|----150----|----95-----|

Или больше так в KSQL:

[some timestamp] | Count all | 245   
[some timestamp] | Count id1 | 150   
[some timestamp] | Count id2 | 95   
.   
.   
.   

Спасибо
Тим

3 ответа

Решение

Вы не можете иметь оба значения для всех и количество для каждого ключа в одном и том же запросе. У вас может быть два запроса: один для подсчета каждого значения в данном столбце, а другой для подсчета всех значений в данном столбце. Предположим, у вас есть поток с двумя столбцами, col1 и col2. Для подсчета каждого значения в столбце col1 с бесконечным размером окна вы можете использовать следующий запрос:

SELECT col1, count(*) FROM mystream1 GROUP BY col1;

Чтобы подсчитать все строки, вам нужно написать два запроса, так как для агрегирования KSQL всегда требуется предложение GROUP BY. Сначала вы создаете новый столбец с постоянным значением, а затем можете подсчитать значения в новом столбце, и, поскольку он является константой, счетчик будет представлять количество всех строк. Вот пример:

CREATE STREAM mystream2 AS SELECT 1 AS col3 FROM mystream1;
SELECT col3, count(*) FROM mystream2 GROUP BY col3;

Это тоже работает, чтобы получить общее количество строк для таблицы:

      ksql> SELECT COUNT(*) FROM `mytable` GROUP BY 1 EMIT CHANGES;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|KSQL_COL_0                                                                                                                                                             |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|2298

Вы можете выполнить расширенное описание в потоке или таблице, чтобы увидеть общее количество сообщений

ksql> describe extended <stream or table name>

образец вывода

Local runtime statistics
------------------------
messages-per-sec:         0   total-messages:   2415888     last-message: 2019-12-06T02:29:43.005Z
Другие вопросы по тегам