2

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

流名称: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
4

1 回答 1

0

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

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

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

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

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

于 2018-04-25T13:07:11.760 回答