Apache kafka 使用JDBC接收器连接器处理要在MySQL中复制的ksqlDB v0.11组合键(表)
我使用的是ksqlDB版本0.11(目前无法升级到新版本),并且愿意使用JDBC接收器连接器将表数据复制到MySQL中。ksqlDB v0.11不支持多个表键,我的数据需要使用多个GROUP BY表达式进行分组 我使用此语句创建表:Apache kafka 使用JDBC接收器连接器处理要在MySQL中复制的ksqlDB v0.11组合键(表),apache-kafka,confluent-platform,ksqldb,Apache Kafka,Confluent Platform,Ksqldb,我使用的是ksqlDB版本0.11(目前无法升级到新版本),并且愿意使用JDBC接收器连接器将表数据复制到MySQL中。ksqlDB v0.11不支持多个表键,我的数据需要使用多个GROUP BY表达式进行分组 我使用此语句创建表: CREATE TABLE estads AS SELECT STID AS stid, ASIG AS asig, COUNT(*) AS np,
CREATE TABLE estads AS SELECT
STID AS stid,
ASIG AS asig,
COUNT(*) AS np,
MIN(NOTA) AS min,
MAX(NOTA) AS max,
AVG(NOTA) AS med,
LATEST_BY_OFFSET(FECHREG) AS fechreg
FROM estads_stm GROUP BY stid, asig EMIT CHANGES;
结果表具有以下架构:
Name : ESTADS
Field | Type
---------------------------------------------
KSQL_COL_0 | VARCHAR(STRING) (primary key)
NP | BIGINT
MIN | DOUBLE
MAX | DOUBLE
MED | DOUBLE
FECHREG | VARCHAR(STRING)
+---------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+-------------------+-----------------------------+
| stid | varchar(15) | NO | PRI | NULL | |
| asig | varchar(10) | NO | PRI | NULL | |
| np | smallint(6) | YES | | NULL | |
| min | decimal(5,2) | YES | | NULL | |
| max | decimal(5,2) | YES | | NULL | |
| med | decimal(5,2) | YES | | NULL | |
| fechreg | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+---------+--------------+------+-----+-------------------+-----------------------------+
如您所见,两个主键(stid和asig)已合并到一个名为KSQL_COL_0的字段中,这是版本0.11的预期行为。问题是,我需要使用JDBC Sink connector将数据复制到具有以下模式的MySQL表中:
Name : ESTADS
Field | Type
---------------------------------------------
KSQL_COL_0 | VARCHAR(STRING) (primary key)
NP | BIGINT
MIN | DOUBLE
MAX | DOUBLE
MED | DOUBLE
FECHREG | VARCHAR(STRING)
+---------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+-------------------+-----------------------------+
| stid | varchar(15) | NO | PRI | NULL | |
| asig | varchar(10) | NO | PRI | NULL | |
| np | smallint(6) | YES | | NULL | |
| min | decimal(5,2) | YES | | NULL | |
| max | decimal(5,2) | YES | | NULL | |
| med | decimal(5,2) | YES | | NULL | |
| fechreg | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+---------+--------------+------+-----+-------------------+-----------------------------+
我不知道如何“取消合并”自动生成的KSQL_COL__0,以便告诉JDBC stid和asig都是MySQL表中的主键。有什么办法来管理吗?我知道,自从ksqlDB版本0.15以来,这不再是一个问题,因为ksqlDB表支持多个键,但正如我所说,在我的情况下,升级不是一个选项
谢谢 我明白了
基本上,您需要在表创建查询中使用AS_VALUE()
子句。这样,您可以在新列中复制两个私钥的值,同时在其自己的列中也有新创建的私钥。然后,只需在JCBD接收器连接器中指定,即可获得除新创建的私钥之外的所有列的值
CREATE TABLE estads AS SELECT
STID AS k1,
ASIG AS k2,
AS_VALUE(STID) AS stid,
AS_VALUE(ASIG) AS asig,
COUNT(*) AS np,
MIN(NOTA) AS min,
MAX(NOTA) AS max,
AVG(NOTA) AS med,
LATEST_BY_OFFSET(FECHREG) AS fechreg
FROM estads_stm GROUP BY k1, k2 EMIT CHANGES;