使用计算表达式加入ksql流

时间:2019-01-29 21:57:31

标签: apache-kafka ksql

我有一个名为SUBSCRIPTIONS的表,其中包含以下列:

KEY varchar,
APPLICATION_ID varchar
SUBSCRIPTION_ID varchar

此表的KEY是KEY列,它由APPLICATION_ID和SUBSCRIPTION_ID组成,格式如<APPLICATION_ID>_<SUBSCRIPTION_ID>

名为NOTIFICATION_EVENTS_STREAM的流包含以下列:

APPLICATION_ID varchar
SUBSCRIPTION_ID varchar
NOTIFICATION_ID varchar
LOCATION_COUNTRY varchar

我需要将NOTIFICATION_EVENTS_STREAM与SUBSCRIPTIONS表结合在一起以提取LOCATION_COUNTRY列,我正在尝试以下查询,但它似乎不起作用:

select e.application_id, e.notification_id, s.location_country, count(*) from NOTIFICATION_EVENTS_STREAM_RICH e LEFT JOIN SUBSCRIPTIONS s ON s.KEY = (e.APPLICATION_ID +'_'+ e.SUBSCRIPTION_ID) GROUP BY e.application_id, e.notification_id, s.location_country;

我收到以下错误:

 Line: 1, Col: 148 : Invalid join criteria (S.KEY = ((E.APPLICATION_ID + '_') + E.SUBSCRIPTION_ID)). Could not find a join criteria operand for E.

我暂时创建了以下流来获取组合列,但这不是必须的:

CREATE STREAM NOTIFICATION_EVENTS_STREAM_RICH WITH (PARTITIONS=1) AS SELECT APPLICATION_ID, NOTIFICATION_ID, SUBSCRIPTION_ID, KIND, APPLICATION_ID +'_'+NOTIFICATION_ID AS NOTIFICATION_KEY, APPLICATION_ID+'_'+SUBSCRIPTION_ID AS SUBSCRIPTION_KEY FROM NOTIFICATION_EVENTS_STREAM;

是否可以在表联接中使用计算表达式?

1 个答案:

答案 0 :(得分:1)

KSQL当前不支持此功能。您可以根据需要评论/赞this issue

您需要手动创建中间流,例如此处的示例:https://www.confluent.io/stream-processing-cookbook/ksql-recipes/creating-composite-key

免责声明:我为Confluent工作。