使用KSQL计算所有条目

时间:2017-11-14 18:52:20

标签: apache-kafka apache-kafka-streams 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   
.   
.   
.   

谢谢你 - 蒂姆

2 个答案:

答案 0 :(得分:9)

对于同一查询中的每个键,您不能同时拥有all和count。这里可以有两个查询,一个用于计算给定列中的每个值,另一个用于计算给定列中的所有值。 假设您有一个包含两列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;

答案 1 :(得分:0)

您可以在流或表上进行扩展描述以查看消息总数

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