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