Ksql:左连接显示流中的列但不显示表

时间:2018-04-25 11:17:22

标签: apache-kafka ksql

我在KSQL中有一个steam和一个表,如下所述:

流名称:DEAL_STREAM

表名:EXPENSE_TABLE

当我运行以下查询时,它仅显示流中的列,但不显示任何表列。

这是预期的输出吗?如果不是我做错了什么?

SELECT TD.EXPENSE_CODE, TD.BRANCH_CODE, TE.EXPENSE_DESC
FROM DEAL_STREAM TD
LEFT JOIN EXPENSE_TABLE TE ON TD.EXPENSE_CODE = TE.EXPENSE_CODE
WHERE TD.EXPENSE_CODE LIKE '%NL%' AND TD.BRANCH_CODE LIKE '%AM%';

查询的输出如下所示。

NL8232@#0          | AM   | null
NL0232@#0          | AM   | null
NL6232@!0          | AM   | null
NL5232^%0          | AM   | null

1 个答案:

答案 0 :(得分:1)

  

当我运行以下查询时,它仅显示流中的列,但不显示任何表列。

在流表(左)连接中,如果在连接/查找时表中没有匹配的记录,则输出记录将包含null列(对于表侧列)。 / p>

  

这是预期的输出吗?如果不是我做错了什么?

例如,您是否有可能在将输入数据写入表中之前将(1)输入数据写入流中?如果是这样,那么流表连接查询将尝试在(1)时执行表查找,此时表中还没有这样的查找数据(因为这发生在稍后的时间(2))。由于没有可用的表数据,因此连接写入了输出记录,其中表格列为null

注意:KSQL中的这种流表连接(以及扩展的Apache Kafka的Streams API,在其上构建了KSQL)几乎是流媒体世界中连接的标准。这里,只有流表连接的流端将触发下游连接输出,如果在连接新输入记录时表侧没有匹配流记录,那么表端列将为null。但是,由于这是用户混淆的常见原因,我们目前正致力于将连接输出的表端触发添加到Apache Kafka的Streams API和KSQL。当这样的功能可用时,您上面的问题将不再发生。