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 使用JDBC接收器连接器处理要在MySQL中复制的ksqlDB v0.11组合键(表)_Apache Kafka_Confluent Platform_Ksqldb - Fatal编程技术网

Apache kafka 使用JDBC接收器连接器处理要在MySQL中复制的ksqlDB v0.11组合键(表)

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,

我使用的是ksqlDB版本0.11(目前无法升级到新版本),并且愿意使用JDBC接收器连接器将表数据复制到MySQL中。ksqlDB v0.11不支持多个表键,我的数据需要使用多个GROUP BY表达式进行分组

我使用此语句创建表:

    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;