KSQL 连接两个以上的流

Tim*_*mbe 3 join stream apache-kafka ksqldb

是否可以在 KSQL 中连接两个以上的流/表?

例子:

我有三个流:

CREATE STREAM StreamA (id BIGINT, message VARCHAR) WITH 
(KAFKA_TOPIC='TopicA', VALUE_FORMAT='DELIMITED');
CREATE STREAM StreamB (id BIGINT, aid BIGINT, message VARCHAR) WITH . 
(KAFKA_TOPIC='TopicB', VALUE_FORMAT='DELIMITED');
CREATE STREAM StreamC (id BIGINT, bid BIGINT, message VARCHAR) WITH 
(KAFKA_TOPIC='TopicC', VALUE_FORMAT='DELIMITED');
Run Code Online (Sandbox Code Playgroud)

我尝试通过加入这三个流来创建另一个流:

CREATE STREAM ABCStream AS SELECT * FROM StreamA a JOIN 
StreamB b ON b.aid = a.id JOIN StreamC c WITHIN 1 HOURS ON 
c.bid = b.id; 
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

mismatched input 'JOIN' expecting ';'  
Caused by: org.antlr.v4.runtime.InputMismatchException
Run Code Online (Sandbox Code Playgroud)

Rob*_*att 5

不可以,在 KSQL v5.0 及之前版本中,每个查询只能连接两个。您需要以菊花链方式连接您的查询,如下所示:

中级流:

CREATE STREAM ABStream AS \
   SELECT * \
     FROM StreamA a \
     JOIN StreamB b \
          ON b.aid = a.id;
Run Code Online (Sandbox Code Playgroud)

多连接流

CREATE STREAM ABCStream AS \
   SELECT * \
     FROM ABStream AB \
     JOIN StreamC c \
          WITHIN 1 HOURS \
          ON c.bid = AB.b_id;
Run Code Online (Sandbox Code Playgroud)