首页 > 解决方案 > 将 KStream 的 2 列组合为 KSQLDB 中的映射或数组

问题描述

我有一个流如下

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

我怎样才能结合p1.valp2.parameter其他下一个流可能会像[{ "val" : p1.val, "params": p2.parameters}]?或者上述流本身是否可能?请指导。提前致谢。

标签: apache-kafkaconfluent-platformksqldb

解决方案


听起来您正在尝试构建包含单个结构的数组或映射。您可以使用数组、结构和映射构造函数来做到这一点:

-- 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;

或者作为地图输出,(需要所有类型匹配):

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 版本。


推荐阅读