Apache kafka 是否有KSQL语句来更新表中的值?
我在主题中有一个数据流,该数据流应被视为ksql表(只有给定关键事项的最后一个值),该数据是关于其他主题中某些数据的特定字段的更新。KSQLDB中是否有任何方法可以处理更新其他流/表/主题中的值的流?目标主题有20个字段的实体,但我的包含更新的流有3个字段的更新,因此我只想更新这3个字段,其他17个字段在目标主题中应保持不变(视为表)。您可以使用JOIN语句解决问题,只需稍加调整,按照示例进行操作,将创建一个包含5个字段的表,但只需要从另一个表更新字段技能和级别 1.从源主题创建表:Apache kafka 是否有KSQL语句来更新表中的值?,apache-kafka,ksqldb,Apache Kafka,Ksqldb,我在主题中有一个数据流,该数据流应被视为ksql表(只有给定关键事项的最后一个值),该数据是关于其他主题中某些数据的特定字段的更新。KSQLDB中是否有任何方法可以处理更新其他流/表/主题中的值的流?目标主题有20个字段的实体,但我的包含更新的流有3个字段的更新,因此我只想更新这3个字段,其他17个字段在目标主题中应保持不变(视为表)。您可以使用JOIN语句解决问题,只需稍加调整,按照示例进行操作,将创建一个包含5个字段的表,但只需要从另一个表更新字段技能和级别 1.从源主题创建表: CREAT
CREATE TABLE TBL_EMPLOYEE( `employee_id` VARCHAR, `name` varchar, `lastName` varchar, `age` INT, `skill` VARCHAR, `level` VARCHAR ) WITH ( KAFKA_TOPIC = 'employee-topic-input', PARTITIONS = 3, VALUE_FORMAT = 'JSON', KEY = '`employee_id`');
2.创建表以处理所需的更新(它可以是流或表,由另一个查询产生)
3.创建最终表以更新所需字段,左连接允许第一个表上的所有元素。如果第二个表上没有任何更新,则技能和级别字段将相同
SET 'auto.offset.reset' = 'earliest';
CREATE TABLE TBL_EMPLOYEE_FINAL AS
SELECT
EMP.`employee_id` AS `employee_id`,
EMP.`name` AS `name`,
EMP.`lastName` AS `lastName`,
IFNULL(UPD.`skill`, EMP.`skill`) as `skill`,
IFNULL(UPD.`level`, EMP.`level`) as `level`
FROM TBL_EMPLOYEE AS EMP
LEFT JOIN TBL_EMPLOYEE_DESIRED_UPDATES UPD ON EMP.ROWKEY = UPD.ROWKEY EMIT CHANGES;
例如:
INSERT INTO TBL_EMPLOYEE (`employee_id`, `name`, `lastName`, `age`, `skill`, `level`) VALUES ('117', 'John', 'Constantine', 30, 'java', 'jr');
INSERT INTO TBL_EMPLOYEE (`employee_id`, `name`, `lastName`, `age`, `skill`, `level`) VALUES ('118', 'Anthony', 'Stark', 40, 'AWS', 'architect');
INSERT INTO TBL_EMPLOYEE (`employee_id`, `name`, `lastName`, `age`, `skill`, `level`) VALUES ('119', 'Clark', 'Kent', 35, 'python', 'senior');
ksql> SELECT * FROM TBL_EMPLOYEE_FINAL EMIT CHANGES;
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
|ROWTIME |ROWKEY |employee_id |name |lastName |skill |level |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
|1611440363833 |119 |119 |Clark |Kent |python |senior |
|1611440361284 |117 |117 |John |Constantine |java |jr |
|1611440361408 |118 |118 |Anthony |Stark |AWS |architect |
第二步是发送更新
INSERT INTO TBL_EMPLOYEE_DESIRED_UPDATES (`employee_id`, `skill`, `level` ) VALUES ('118', 'mongo', 'senior');
结果
ksql> SELECT * from TBL_EMPLOYEE_FINAL EMIT CHANGES;
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
|ROWTIME |ROWKEY |employee_id |name |lastName |skill |level |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
|1611440363833 |119 |119 |Clark |Kent |python |senior |
|1611440361284 |117 |117 |John |Constantine |java |jr |
|1611440361408 |118 |118 |Anthony |Stark |AWS |architect |
|1611440585726 |118 |118 |Anthony |Stark |mongo |senior |
您必须考虑表中的最新元素作为具有两个修改的新元素。另一个是表的changelog的一部分。这些记录是不可变的
ksql> SELECT * from TBL_EMPLOYEE_FINAL EMIT CHANGES;
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
|ROWTIME |ROWKEY |employee_id |name |lastName |skill |level |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
|1611440363833 |119 |119 |Clark |Kent |python |senior |
|1611440361284 |117 |117 |John |Constantine |java |jr |
|1611440361408 |118 |118 |Anthony |Stark |AWS |architect |
|1611440585726 |118 |118 |Anthony |Stark |mongo |senior |