Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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 是否有KSQL语句来更新表中的值?_Apache Kafka_Ksqldb - Fatal编程技术网

Apache kafka 是否有KSQL语句来更新表中的值?

Apache kafka 是否有KSQL语句来更新表中的值?,apache-kafka,ksqldb,Apache Kafka,Ksqldb,我在主题中有一个数据流,该数据流应被视为ksql表(只有给定关键事项的最后一个值),该数据是关于其他主题中某些数据的特定字段的更新。KSQLDB中是否有任何方法可以处理更新其他流/表/主题中的值的流?目标主题有20个字段的实体,但我的包含更新的流有3个字段的更新,因此我只想更新这3个字段,其他17个字段在目标主题中应保持不变(视为表)。您可以使用JOIN语句解决问题,只需稍加调整,按照示例进行操作,将创建一个包含5个字段的表,但只需要从另一个表更新字段技能和级别 1.从源主题创建表: CREAT

我在主题中有一个数据流,该数据流应被视为ksql表(只有给定关键事项的最后一个值),该数据是关于其他主题中某些数据的特定字段的更新。KSQLDB中是否有任何方法可以处理更新其他流/表/主题中的值的流?目标主题有20个字段的实体,但我的包含更新的流有3个字段的更新,因此我只想更新这3个字段,其他17个字段在目标主题中应保持不变(视为表)。

您可以使用JOIN语句解决问题,只需稍加调整,按照示例进行操作,将创建一个包含5个字段的表,但只需要从另一个表更新字段技能和级别

1.从源主题创建表:

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                         |