我在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
答案 0 :(得分:1)
当我运行以下查询时,它仅显示流中的列,但不显示任何表列。
在流表(左)连接中,如果在连接/查找时表中没有匹配的记录,则输出记录将包含null
列(对于表侧列)。 / p>
这是预期的输出吗?如果不是我做错了什么?
例如,您是否有可能在将输入数据写入表中之前将(1)输入数据写入流中?如果是这样,那么流表连接查询将尝试在(1)时执行表查找,此时表中还没有这样的查找数据(因为这发生在稍后的时间(2))。由于没有可用的表数据,因此连接写入了输出记录,其中表格列为null
。
注意:KSQL中的这种流表连接(以及扩展的Apache Kafka的Streams API,在其上构建了KSQL)几乎是流媒体世界中连接的标准。这里,只有流表连接的流端将触发下游连接输出,如果在连接新输入记录时表侧没有匹配流记录,那么表端列将为null
。但是,由于这是用户混淆的常见原因,我们目前正致力于将连接输出的表端触发添加到Apache Kafka的Streams API和KSQL。当这样的功能可用时,您上面的问题将不再发生。