Apache kafka 为什么ksql不能识别min函数

Apache kafka 为什么ksql不能识别min函数,apache-kafka,confluent-platform,ksqldb,Apache Kafka,Confluent Platform,Ksqldb,我正在使用confluent编写一个查询,以获取卡夫卡主题5分钟窗口中的第一个时间戳。这是一个问题(我知道这不是一个好办法): 但我有一个错误: 谓词的代码生成失败:找不到任何具有 “MIN”这个名字。表达式:(METRIC_DATETIME_UTC)= 最小值(TIMESTAMPTOSTRING(METRIC_DATETIME_UTC,'yyyy-MM-dd HH:MM:ss')), 架构:ROWKEYSTRING键,IDSTRING,METRIC\u NAMESTRING, METRIC\u

我正在使用confluent编写一个查询,以获取卡夫卡主题5分钟窗口中的第一个时间戳。这是一个问题(我知道这不是一个好办法):

但我有一个错误:

谓词的代码生成失败:找不到任何具有 “MIN”这个名字。表达式:(METRIC_DATETIME_UTC)= 最小值(TIMESTAMPTOSTRING(METRIC_DATETIME_UTC,'yyyy-MM-dd HH:MM:ss')), 架构:
ROWKEY
STRING键,
ID
STRING,
METRIC\u NAME
STRING,
METRIC\u VALUE
STRING,
METRIC\u DATETIME\u UTC
BIGINT,
METRIC\u INDEX
字符串,
IANA\u时区
STRING,
PROCESSED\u DATETIME\u UTC
BIGINT,
DATA\u TYPE
STRING,
ASSET\u TYPE
STRING,
ROWTIME
BIGINT,
ROWKEY
字符串原因:找不到任何名为“MIN”的函数


有人知道如何解决这个问题吗?

不完全清楚你想要达到的目标。请参阅上面关于添加更多细节以帮助人们了解您试图实现的目标的问题的评论

也就是说,我可以说

由于两个原因,
Min
功能未被识别:

  • 您正在将
    TIMESTAMPTOSTRING
    的输出传递给
    MIN
    ,但
    MIN
    不接受字符串
  • 不能在
    WHERE
    子句中使用聚合函数
您看到的错误消息看起来像一个bug。如果在最新版本的ksqlDB上仍然存在,您可能需要

即使更正您要查询的这两件事也会失败,因为ksqlDB中的窗口操作需要聚合,所以您需要一个
分组依据

例如,如果您希望为每个5分钟窗口捕获每
度量值的min
metric\u datetime\u utc
,可以使用以下方法:

将表开始度量值创建为
挑选
公制单位值,
最小值(公制日期时间utc)作为最小值
从数据聚合
车窗翻滚(尺寸5分钟)
按度量值分组;
这将创建一个带窗口的表,即一个表,其中键由
metric_value
WINDOWSTART
时间组成
minTs
将存储看到的最小日期时间

让我们通过查询运行一些数据来了解发生了什么:

输入:

rowtime | metric_value  | metric_datetime_utc
--------|---------------|--------------------
 1      |  A            | 3
 2      |  A            | 4
 3      |  A            | 2
 4      |  B            | 5
 300000 |  A            | 6
START\u METRIC\u VALUE
主题的输出可能是(注意:METRIC\u VALUE和windowStart将存储在卡夫卡记录的键中,而minTs将存储在值中):

实际输出到主题的内容将取决于您的
cache.max.bytes.buffering
值。将此设置为
0
,关闭缓冲,将看到上述输出。但是,启用缓冲后,一些中间结果可能不会输出到Kafka,尽管每个窗口的最终结果将保持不变。您还可以使用下面的命令控制输出到Kafka的内容

上述解决方案为您提供了每个度量值的最小时间戳。如果希望每个窗口都能看到全局最小日期时间,则可以通过一个常量
分组。注意,这会将所有事件路由到单个ksqlDB节点,因此无法作为解决方案很好地扩展。如果缩放是一个问题,则有解决方案,例如,首先计算最小的
度量值
,然后对其进行后处理以找到全局最小值

将表开始度量值创建为
挑选
1作为关键,
最小值(公制日期时间utc)作为最小值
从数据聚合
车窗翻滚(尺寸5分钟)
分组1例;

注意:ksqlDB版本0.10的语法正确。您可能需要针对其他版本进行调整。

如果您在
dataaggregation
的架构中添加了详细信息,并在其中添加了一些示例和所需的输出,则会有所帮助。这将有助于人们理解你想要实现的目标。
rowtime | metric_value  | metric_datetime_utc
--------|---------------|--------------------
 1      |  A            | 3
 2      |  A            | 4
 3      |  A            | 2
 4      |  B            | 5
 300000 |  A            | 6
metric_value | windowStart | minTs 
-------------|-------------|------
 A           | 0           | 3
 A           | 0           | 3
 A           | 0           | 2
 B           | 0           | 5
 A           | 300000      | 6