【发布时间】:2020-06-18 00:10:15
【问题描述】:
我目前正在使用this process(见下文)在 ksqlDB 中生成一个自动递增列。但现在我想知道这种方法是否存在竞争条件或其他同步问题。这是在 ksqlDB 中生成自动递增列的好方法吗?如果没有,有没有更好的方法?
假设您想将一个 ksqlDB 流中的值插入到另一个 ksqlDB 流中,同时在 目标流。
首先,创建两个流:
CREATE STREAM dest (ROWKEY INT KEY, i INT, x INT) WITH (kafka_topic='test_dest', value_format='json', partitions=1); CREATE STREAM src (x INT) WITH (kafka_topic='test_src', value_format='json', partitions=1);接下来,创建一个包含目标流最大值的物化视图。
CREATE TABLE dest_maxi AS SELECT MAX(i) AS i FROM dest GROUP BY 1;我们需要能够将源流加入物化视图。为此,我们将创建另一个中间流 使用始终设置为 1 的虚拟
one列,这就是我们对物化视图进行分组的原因:CREATE STREAM src_one AS SELECT x, 1 AS one FROM src; INSERT INTO dest SELECT COALESCE(dest_maxi.i,0)+1 AS i, src_one.x AS x FROM src_one LEFT JOIN dest_maxi ON src_one.one = dest_maxi.ROWKEY PARTITION BY COALESCE(dest_maxi.i,0)+1 EMIT CHANGES;现在您可以将值插入流
src并观察它们以自动递增的 ID 出现在流dest中。
【问题讨论】:
标签: ksqldb