使用 KSQL 计算所有条目
Counting all entries with 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
.
.
.
谢谢
-蒂姆
您不能在同一个查询中同时拥有全部计数和每个键的计数。您可以在此处进行两个查询,一个用于计算给定列中的每个值,另一个用于计算给定列中的所有值。
假设您有一个包含两列的流,col1 和 col2。
要计算 col1 中具有无限 window 大小的每个值,您可以使用以下查询:
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;
您可以对流进行扩展描述或table查看消息总数
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
这也适用于获取 table:
的总行数
ksql> SELECT COUNT(*) FROM `mytable` GROUP BY 1 EMIT CHANGES;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|KSQL_COL_0 |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|2298
是否可以使用 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
.
.
.
谢谢
-蒂姆
您不能在同一个查询中同时拥有全部计数和每个键的计数。您可以在此处进行两个查询,一个用于计算给定列中的每个值,另一个用于计算给定列中的所有值。 假设您有一个包含两列的流,col1 和 col2。 要计算 col1 中具有无限 window 大小的每个值,您可以使用以下查询:
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;
您可以对流进行扩展描述或table查看消息总数
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
这也适用于获取 table:
的总行数ksql> SELECT COUNT(*) FROM `mytable` GROUP BY 1 EMIT CHANGES;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|KSQL_COL_0 |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|2298