使用KSQL计算所有条目

Tim*_*.G. 4 apache-kafka apache-kafka-streams ksql

是否可以使用KSQL来计算特定列的条目,GROUP BY而不是通过应用程序流的所有条目聚合?

我正在寻找这样的东西:

| Count all | Count id1 | count id2 |
| ---245----|----150----|----95-----|
Run Code Online (Sandbox Code Playgroud)

或者在KSQL中更像这样:

[some timestamp] | Count all | 245   
[some timestamp] | Count id1 | 150   
[some timestamp] | Count id2 | 95   
.   
.   
.   
Run Code Online (Sandbox Code Playgroud)

谢谢
- 蒂姆

Hoj*_*jat 9

您不能同时拥有all的所有计数并计算同一查询中的每个键.这里可以有两个查询,一个用于计算给定列中的每个值,另一个用于计算给定列中的所有值.假设您有一个包含两列col1和col2的流.要使用无限窗口大小计算col1中的每个值,可以使用以下查询:

SELECT col1, count(*) FROM mystream1 GROUP BY col1;
Run Code Online (Sandbox Code Playgroud)

要计算所有需要写入两个查询的行,因为KSQL始终需要GROUP BY子句进行聚合.首先,您创建一个具有常量值的新列,然后您可以计算新列中的值,因为它是一个常量,计数将表示所有行的计数.这是一个例子:

CREATE STREAM mystream2 AS SELECT 1 AS col3 FROM mystream1;
SELECT col3, count(*) FROM mystream2 GROUP BY col3;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您的主题具有高数据速率聚合且其键值为一个值,则会对该主题进行重新分区,并将所有消息发送到一个分区,这可能会导致扩展问题。因此,在使用此方法时应格外小心。 (2认同)