Apache kafka 从ksqlDB中的流在Create Table中连接的Rowkey

Apache kafka 从ksqlDB中的流在Create Table中连接的Rowkey,apache-kafka,ksqldb,Apache Kafka,Ksqldb,这条溪流是: CREATE STREAM SENSORS_KSTREAM (sensorid INT, serialnumber VARCHAR, mfgdate VARCHAR, productname VARCHAR, customerid INT, locationid INT, macaddress VARCHAR, installationdate VARCHAR) WITH (KAFKA_TOPIC='SENSORS_DETAILS', VALUE_FOR

这条溪流是:

CREATE STREAM SENSORS_KSTREAM (sensorid INT,
  serialnumber VARCHAR,
  mfgdate VARCHAR,
  productname VARCHAR,
  customerid INT,
  locationid INT,
  macaddress VARCHAR,
  installationdate VARCHAR)
WITH (KAFKA_TOPIC='SENSORS_DETAILS', VALUE_FORMAT='AVRO', KEY='sensorid');
我用它创建的表是:

CREATE TABLE SENSORS_KTABLE AS
SELECT sensorid, serialnumber, mfgdate, productname, customerid, locationid, macaddress, installationdate, COUNT(*) AS TOTAL 
FROM SENSORS_KSTREAM WINDOW TUMBLING (SIZE 1 MINUTES) 
GROUP BY sensorid, serialnumber, mfgdate, productname, customerid, locationid, macaddress, installationdate;

生成的行键不是我想要的

我只想要SENSORID作为行键

谁能帮我做这个

提前谢谢

附言:
我正在使用Confluent 5.4.0 standalone。

ksqlDB将表的主键存储在基础Kafka消息的键中。这对于确保相同密钥的一致分区分配和日志压缩等重要事项至关重要

ksqlDB不支持复合键,尽管这是一项正在开发的功能。因此,同时,当您按多个列分组时,ksqlDB会尽其所能构建遇到的复合键。不是很好,但它实际上适用于许多用例

上面的语句正在创建一个主键中包含许多列的表,它们当前都被序列化为单个字符串值

您要求在键中只包含
SENSORID
。。。但是您的GROUPBY子句使键后面的所有列都成为键的一部分

在我看来,您有一个主题,其中包含传感器的更新值流。在这种情况下,我建议研究两种选择:

  • 如果输入主题中的每一行都包含每个传感器的所有数据,那么为什么不将其作为表而不是流导入:
  • 或者,
    LATEST\u BY\u OFFSET
    可能用于捕获每列的最新值:
  • 创建表格传感器\u KTABLE作为
    选择传感器ID、最新按偏移量(serialnumber)、最新按偏移量(mfgdate)、最新按偏移量(productname)、最新按偏移量(customerid)、最新按偏移量(locationid)、最新按偏移量(macaddress)、最新按偏移量(installationdate)
    来自传感器的流窗口翻滚(大小为1分钟)
    感器组;
    
    LAST_BY_OFFSET在几个版本之前才引入,所以您可能需要更新

    希望这两个选项能帮助你达到你想要的目标

    CREATE TABLE SENSORS_KSTREAM (sensorid INT,
      serialnumber VARCHAR,
      mfgdate VARCHAR,
      productname VARCHAR,
      customerid INT,
      locationid INT,
      macaddress VARCHAR,
      installationdate VARCHAR)
    WITH (KAFKA_TOPIC='SENSORS_DETAILS', VALUE_FORMAT='AVRO', KEY='sensorid');