Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 我可以在KSQL中从表转换为流吗?_Apache Kafka_Streaming_Ksqldb - Fatal编程技术网

Apache kafka 我可以在KSQL中从表转换为流吗?

Apache kafka 我可以在KSQL中从表转换为流吗?,apache-kafka,streaming,ksqldb,Apache Kafka,Streaming,Ksqldb,我和KSQL在卡夫卡工作。我想在5分钟内找出不同DEV_名称(ROWKEY)中的最后一行。因此,我创建了流和聚合表以进一步连接 通过下面的KSQL,我创建了一个表,用于在5分钟内找出不同DEV_名称的最后一行 CREATE TABLE TESTING_TABLE AS SELECT ROWKEY AS DEV_NAME, max(ROWTIME) as LAST_TIME FROM TESTING_STREAM WINDOW TUMBLING (SIZE 5 MINUTES)

我和KSQL在卡夫卡工作。我想在5分钟内找出不同DEV_名称(ROWKEY)中的最后一行。因此,我创建了流和聚合表以进一步连接

通过下面的KSQL,我创建了一个表,用于在5分钟内找出不同DEV_名称的最后一行

CREATE TABLE TESTING_TABLE  AS
SELECT  ROWKEY AS DEV_NAME, max(ROWTIME) as LAST_TIME 
    FROM TESTING_STREAM WINDOW TUMBLING (SIZE 5 MINUTES)
    GROUP BY ROWKEY;
那么,我想和大家一起:

CREATE STREAM TESTING_S_2 AS 
  SELECT *
    FROM TESTING_S  S
        INNER JOIN TESTING_T T
        ON    S.ROWKEY = T.ROWKEY
    WHERE  
    S.ROWTIME = T.LAST_TIME;
但是,出现了以下错误:

Caused by: org.apache.kafka.streams.errors.StreamsException: A serializer (org.apache.kafka.streams.kstream.TimeWindowedSerializer) is not compatible to the actual key type (key type: org.apache.kafka.connect.data.Struct). Change the default Serdes in StreamConfig or provide correct Serdes via method parameters.
应该是窗口翻滚功能改变了我的行键样式

(e.g. DEV_NAME_11508 -> DEV_NAME_11508 : Window{start=157888092000 end=-}       

因此,在不设置Serdes的情况下,我是否可以将表转换为流并按DEV_名称设置分区

正如您所指出的,问题在于您的表是一个带窗口的表,这意味着该表的键是带窗口的,并且您不能使用非带窗口的键查看带窗口的表

您的表将在每5分钟的窗口中为每个行键生成一个唯一的行。然而,除了最近的窗口,你似乎什么都不在乎。这可能是因为您不需要表格中的窗口,例如

创建表测试\u表作为
挑选
ROWKEY作为DEV_名称,
最大(行时间)为最后一次
从测试流
其中ROWTIME>(UNIX_TIMESTAMP()-300000)
按行键分组;
将跟踪每个密钥的最大时间戳,忽略任何超过5分钟的时间戳。(当然,此检查仅在接收事件时进行,5分钟后不会删除该行)

此外,此连接:

将流测试创建为
挑选*
从测试
内部连接测试
在S.ROWKEY=T.ROWKEY上
哪里
S.ROWTIME=T.LAST_时间;
几乎可以肯定的是,由于比赛条件的原因,他没有按照你的想法去做,也不会按照你想要的方式工作


现在还不清楚你想要实现什么。添加有关源数据和所需输出的更多信息可能有助于人们为您提供解决方案。

KSQL仅支持字符串键,上次我检查时