KSQL创建具有多列聚合的表

Ric*_*cht 2 apache-kafka ksqldb

所以本质上我想按两列分组,如下所示:

CREATE TABLE foo AS
SELECT a, b, SUM(a)
FROM whatever
GROUP BY a, b
Run Code Online (Sandbox Code Playgroud)

whatever是Kafka格式的流。当我发出命令时,ksql 返回:

Key format does not support schema.
format: KAFKA
schema: Persistence{columns=[`a` STRING KEY, `b` STRING KEY], features=[]}
reason: The 'KAFKA' format only supports a single field. Got: [`a` STRING KEY, `b` STRING KEY]
Caused by: The 'KAFKA' format only supports a single field. Got: [`DEVICE`
    a KEY, `b` STRING KEY] 
Run Code Online (Sandbox Code Playgroud)

问题是Kafka格式不支持多列键。有没有办法解决这个问题,例如在此表中创建一个人工密钥?我没能做到这一点。

我看到有人发布了类似的问题,答案似乎有效。我认为这是因为格式的原因。/sf/answers/3513526761/

该文档提到多列聚合可能不起作用,但也说 ksql 做了一个后台解决方法以使其起作用。不幸的是 ksql 只返回给定的错误消息。https://www.confluence.de/blog/ksqldb-0-10-updates-key-columns/#multi-column-aggregations

有趣的是,省略第一行是CREATE TABLE foo AS有效的。因此,如果有一些数据进来,聚合就会起作用。但这当然不是持久的。如果没有其他办法,我也可以在 ksql 中使用没有定义主键的表,因为我仍然可以在应用程序中使用 {a, b} 标识数据。

有人能帮我吗?谢谢。

Rob*_*att 5

如果您升级到 ksqlDB 0.15,则可以执行此操作。该版本引入了多键支持。您需要使用KEY_FORMAT支持它的。

ksql> CREATE TABLE FOO AS SELECT A, B, SUM(C) FROM TEST_STREAM GROUP BY A,B;

 Message
-----------------------------------
 Created query with ID CTAS_FOO_53
-----------------------------------
ksql> DESCRIBE FOO;

Name                 : FOO
 Field      | Type
---------------------------------------------
 A          | BIGINT           (primary key)
 B          | VARCHAR(STRING)  (primary key)
 KSQL_COL_0 | DOUBLE
---------------------------------------------
For runtime statistics and query details run: DESCRIBE EXTENDED <Stream,Table>;

ksql> SELECT * FROM FOO EMIT CHANGES LIMIT 5;
+---------------------------+---------------------------+---------------------------+
|A                          |B                          |KSQL_COL_0                 |
+---------------------------+---------------------------+---------------------------+
|220071000                  |AIS                        |0.4                        |
|257838000                  |AIS                        |6.2                        |
|538007854                  |AIS                        |22.700000000000003         |
|257487000                  |AIS                        |2.4                        |
|257601800                  |AIS                        |5.8999999999999995         |
Limit Reached
Query terminated
Run Code Online (Sandbox Code Playgroud)