【问题标题】:Counting all entries with KSQL使用 KSQL 计算所有条目
【发布时间】:2018-04-27 20:11:31
【问题描述】:

是否可以使用 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   
.   
.   
.   

谢谢
- 蒂姆

【问题讨论】:

  • 所以在伪 SQL 中,类似于 SELECT COUNT(*), COUNT(DISTINCT ID1), COUNT(DISTINCT ID2) FROM FOO?这就是你所追求的吗?
  • 是的,这是最初的想法。然而,最终的想法是简单地获取全部记录,所以只有 count(*)。 @Hojjat 的回答似乎工作得很好!

标签: apache-kafka apache-kafka-streams ksqldb


【解决方案1】:

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

【讨论】:

  • 完美,非常感谢,第二部分正是我正在寻找的!谢谢
  • 请注意,如果您有一个具有高数据速率聚合的主题,其中一个键值将对该主题进行重新分区并将所有消息发送到一个分区,这可能会导致扩展问题。所以你应该小心使用这种方法。
  • 很高兴知道,非常感谢。这将主要用于测试,所以幸运的是不是生产用途。
  • 没有分组的COUNT这个相当明显的用例是否有ksql票?
  • SELECT COUNT(*) FROM mystream GROUP BY 1 会工作吗?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    这也适用于获取表的总行数:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 2023-01-26
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多