【发布时间】:2020-10-26 04:51:08
【问题描述】:
如果我有一个流 s1,其中 messages 列类型为 Array<Map<VARCHAR, VARCHAR>>,如下所示
ROWTIME key messages
-------------------------------
t1 1 [{id: 1, k1: v1, k2: v2}, {id: 2, k1: v3, k2: v4}]
t2 2 [{id: 1, k1: v5, k2: v6}, {id: 2, k1: v7, k2: v8}]
.......
.......
我正在创建另一个流 s2 使用
create stream s2 as select explode(message) from s1 emit changes;
ROWTIME message
-----------------------------
t1 {id: 1, k1: v1, k2: v2}
t1 {id: 2, k1: v3, k2: v4}
t2 {id: 1, k1: v5, k2: v6}
t2 {id: 2, k1: v7, k2: v8}
...........
...........
我的目标是创建一个包含id、k1、k2 列的表,我在 s1 中以数组格式发布,以确保它们都在表中一起更新.
create stream s3 as select message['id'] as id, message['k1'] as k1, message['k2'] as k2 from s2 emit changes;
create table table1 as select id, latest_by_offset(k1), latest_by_offset(k2) from s3 group by id emit changes;
通过以上,是否可以保证从单个数组分解的所有消息(任意计数,当前计数为 2)将立即应用于表 1?换句话说,是否可以保证以下状态是never可能的,只有来自t2 的id 1 应用于table 1,但id 2 来自t2 时间戳不是已申请。
ROWTIME id k1 k2
----------------------------------------
t1 2 v3 v4
t2 1 v5 v6
【问题讨论】:
标签: ksqldb