Подсчет всех записей с 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