在ksqldb中将kstream的2列组合为map或array

i1icjdpr  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(396)

我有一条小溪如下

CREATE STREAM sample AS
SELECT
    p1.grade,
    p1.val,
    p2.parameters
FROM Parent1 p1
JOIN Parent2 p2
ON
p1.rule = p2.rule;

我该怎么组合 p1.val 以及 p2.parameter 在另一条流中可能是这样的 [{ "val" : p1.val, "params": p2.parameters}] ? 或者在上面的流本身是可能的?请引导。提前谢谢。

weylhg0b

weylhg0b1#

听起来像是要构建一个包含单个结构的数组,或者一个Map。可以使用array、struct和map构造函数执行此操作:

-- create an array:
ARRAY[1,2,3]

-- create a map:
MAP('key1':= 10, 'key2':= 20)

-- create a struct:
STRUCT('field1':= 10, 'field2':= 'bob')

所以要得到 [{ "val" : p1.val, "params": p2.parameters}] 您可以尝试:

CREATE STREAM sample AS
SELECT
    ARRAY[STRUCT(
    'val' := p1.val,
    'params' := p2.parameters
    )] AS COL0
FROM Parent1 p1
JOIN Parent2 p2
ON
p1.rule = p2.rule;

或输出为Map(需要所有类型匹配):

CREATE STREAM sample AS
SELECT
    MAP(
    'val' := p1.val,
    'params' := p2.parameters
    ) AS COL0
FROM Parent1 p1
JOIN Parent2 p2
ON
p1.rule = p2.rule;

或作为结构输出:

CREATE STREAM sample AS
SELECT
    STRUCT(
    'val' := p1.val,
    'params' := p2.parameters
    ) AS COL0
FROM Parent1 p1
JOIN Parent2 p2
ON
p1.rule = p2.rule;

注意:这些构造函数是在一两个版本之前引入的。如果出现编译器错误,可能需要升级到更高的ksqldb版本。

相关问题