ksqlDB关联Debezium同步表时提示右表主键连接错误如何解决?
报错根本原因
你声明的右表TB_EMPLOYEE的主键是完整的ID STRUCT结构体对象,而非结构体内部的EMPLOYEE_ID子字段。ksqlDB的表-表JOIN规则要求右表的关联键必须是整个主键字段,不能是主键字段的嵌套属性,因此你直接用EM.ID->EMPLOYEE_ID做关联不符合规则。
解决步骤
你需要先对员工表做重键处理,将主键从STRUCT类型转换为EMPLOYEE_ID标量类型,再执行关联操作:
- 先删除之前创建的
TB_EMPLOYEE表(也可保留源表单独创建重键视图)
DROP TABLE TB_EMPLOYEE;
- 创建重键后的员工表,将主键设置为
EMPLOYEE_ID标量值
CREATE TABLE TB_EMPLOYEE_REKEYED WITH (KAFKA_TOPIC='TB_EMPLOYEE_REKEYED', FORMAT='AVRO') AS SELECT ID->EMPLOYEE_ID AS EMPLOYEE_ID PRIMARY KEY, BEFORE, AFTER, SOURCE, OP, TS_MS, TRANSACTION FROM EMPLOYEE EMIT CHANGES;
- 用重键后的表执行关联操作创建目标表
CREATE TABLE REQUEST_EMPLOYEE AS SELECT RQ.ID->REQUEST_ID, RQ.AFTER->REQUESTER_ID, RQ.AFTER->STATUS_ID, EM.EMPLOYEE_ID, EM.AFTER->NAME AS REQUESTER FROM TB_REQUEST RQ JOIN TB_EMPLOYEE_REKEYED EM ON RQ.AFTER->REQUESTER_ID = EM.EMPLOYEE_ID;
注意事项
如果后续需要合并其余7个Debezium生成的主题,都可以按照相同的逻辑先将对应表的主键重键为需要关联的标量字段,再做多表关联即可。
内容的提问来源于stack exchange,提问作者dotSlashLeo
相关产品推荐
相关产品推荐

