KSQL create table with multi-column aggregation
KSQL create table with multi-column aggregation
基本上我想按两列分组,如下所示:
CREATE TABLE foo AS
SELECT a, b, SUM(a)
FROM whatever
GROUP BY a, b
whatever
是Kafka格式的流。当我发出命令时,ksql returns:
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]
问题是Kafka格式不支持多列键。有没有办法解决这个问题,e。 G。在此 table 中创建一个人工密钥?我没有做到这一点。
我看到有人发布了类似的问题,答案似乎有效。我认为这是因为格式。
文档提到多列聚合可能不起作用,但也说 ksql 做了一个后台解决方法来使其工作。不幸的是 ksql 只给出 returns 给出的错误信息。 https://www.confluent.de/blog/ksqldb-0-10-updates-key-columns/#multi-column-aggregations
有趣的是,省略第一行 CREATE TABLE foo AS
是可行的。因此,如果有一些数据进来,聚合就会起作用。但这当然不是持久的。如果没有别的工作,我也可以使用没有定义主键的 table,如果可能的话,在 ksql 中,因为我仍然可以在我的应用程序中用 {a, b} 识别数据。
有人可以帮助我吗?谢谢。
如果升级到 ksqlDB 0.15,则可以执行此操作。这个版本 introduced multi-key support。您需要使用支持它的 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
基本上我想按两列分组,如下所示:
CREATE TABLE foo AS
SELECT a, b, SUM(a)
FROM whatever
GROUP BY a, b
whatever
是Kafka格式的流。当我发出命令时,ksql returns:
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]
问题是Kafka格式不支持多列键。有没有办法解决这个问题,e。 G。在此 table 中创建一个人工密钥?我没有做到这一点。
我看到有人发布了类似的问题,答案似乎有效。我认为这是因为格式。
文档提到多列聚合可能不起作用,但也说 ksql 做了一个后台解决方法来使其工作。不幸的是 ksql 只给出 returns 给出的错误信息。 https://www.confluent.de/blog/ksqldb-0-10-updates-key-columns/#multi-column-aggregations
有趣的是,省略第一行 CREATE TABLE foo AS
是可行的。因此,如果有一些数据进来,聚合就会起作用。但这当然不是持久的。如果没有别的工作,我也可以使用没有定义主键的 table,如果可能的话,在 ksql 中,因为我仍然可以在我的应用程序中用 {a, b} 识别数据。
有人可以帮助我吗?谢谢。
如果升级到 ksqlDB 0.15,则可以执行此操作。这个版本 introduced multi-key support。您需要使用支持它的 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