ksql:left join显示流中的列,但不显示表

xxhby3vn  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(406)

我在ksql中有一个steam和一个表,如下所述:
流名称:deal\u stream
表名:费用表
当我运行下面的查询时,它只显示流中的列,而不显示任何表列。
这是预期的产出吗。如果不是我做错了什么?

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
ylamdve6

ylamdve61#

当我运行下面的查询时,它只显示流中的列,而不显示任何表列。
在流表(左)联接中,输出记录将包含 null 列(对于表边列),如果在联接/查找时表中没有匹配的记录。
这是预期的产出吗。如果不是我做错了什么?
例如,您是否可能在将输入数据写入表之前将(1)输入数据写入流?如果是这样,那么流表联接查询将在(1)时尝试执行表查找,而此时表中还没有此类查找数据(因为这发生在时间(2)之后)。因为没有这样的表数据可用,所以join在表边列所在的位置写入输出记录 null .
注意:ksql中的这个流表连接(扩展为apachekafka的streamsapi,ksql是建立在这个api之上的)几乎是流世界中连接的标准。在这里,只有流表连接的流端将触发下游连接输出,如果在连接新的输入记录时,表端没有与流记录匹配的记录,那么表端列将被删除 null . 但是,由于这是导致用户混淆的常见原因,因此我们目前正在将连接输出的表端触发添加到apachekafka的streamsapi和ksql中。当这样一个特性可用时,您的上述问题就不会再发生了。

相关问题