Apache kafka KSQL窗口聚合流

Apache kafka KSQL窗口聚合流,apache-kafka,ksqldb,Apache Kafka,Ksqldb,我正试图根据事件的一个属性对事件进行分组,并随着时间的推移使用,特别是 我有一个从卡夫卡主题生成的流,它的TIMESTAMP属性指定得很好 当我尝试创建具有会话窗口的流时,使用如下查询: 创建流会话\u流作为 选择 从事件流 窗口会话5分钟 由…分组。。。; 我总是会出错: SELECT查询生成一个表。请改用CREATETABLE作为SELECT语句 是否可以使用窗口聚合创建流 当我按照建议尝试创建一个表,然后创建一个包含所有会话启动事件的流时,查询如下: 创建流会话\u启动\u流作为 挑选*

我正试图根据事件的一个属性对事件进行分组,并随着时间的推移使用,特别是

我有一个从卡夫卡主题生成的流,它的TIMESTAMP属性指定得很好

当我尝试创建具有会话窗口的流时,使用如下查询:

创建流会话\u流作为 选择 从事件流 窗口会话5分钟 由…分组。。。; 我总是会出错:

SELECT查询生成一个表。请改用CREATETABLE作为SELECT语句

是否可以使用窗口聚合创建流

当我按照建议尝试创建一个表,然后创建一个包含所有会话启动事件的流时,查询如下:

创建流会话\u启动\u流作为 挑选* 从会话表 其中WINDOWSTART=WINDOWEND; KSQL通知我:

KSQL不支持对窗口化表的持久查询


如何在KSQL中创建启动会话窗口的事件流?

如果切换到create table语句,create STREAM语句将创建一个不断更新的表。接收器主题会话_流将包含表的更改流,即其更改日志

ksqlDB将其建模为一个表,因为它具有表语义,即表中只能存在具有任何特定键的单行。但是,变更日志将包含已应用于表的变更流

如果您想要的是一个包含所有会话的主题,那么类似的内容将创建:

-创建具有新“数据”主题的流: 创建流数据用户\u ID INT 使用kafka_topic='data',value_format='json'; -创建跟踪每个会话的用户交互的表: 将表会话创建为 选择USER\u ID,COUNTUSER\u ID作为计数 从数据 窗口会话5秒 按用户标识分组; 这将创建一个会话主题,其中包含对会话表的更改:即其更改日志

如果要将其转换为会话启动事件流,那么不幸的是ksqlDB还不允许您直接从表中更改创建流,但您可以通过表的更改日志创建流:

-在现有“会话”主题上创建流。 -注意,它说明窗口类型为“会话”。 创建流会话\u流ROWKEY INT KEY,COUNT BIGINT 使用kafka_topic='SESSIONS',value_format='JSON',window_type='Session'; -创建窗口开始事件流: 创建流会话\u启动为 从会话流中选择* 其中WINDOWSTART=WINDOWEND; 注意,在即将发布的0.10版本中,您将能够正确命名会话\u流中的键列:

创建流会话\u流用户\u ID INT键,COUNT BIGINT 使用kafka_topic='SESSIONS',value_format='JSON',window_type='Session';
我正在使用confluent.cloud提供的KSQL的云版本。感谢您的回答Andrew,在confluent.cloud上尝试此解决方案时,我发现了两个问题:需要为表changelog流指定副本和分区以及主题名称。它与表名不同,但类似于:pksxxx-yyyv1SESSION。我接受你的答案,因为它的工作!