为什么 KSQL 查询从流-流联接创建的流中返回空值?



我在流-流连接查询结果上遇到意外行为。

情况

KSQL 版本:5.1.3

  1. 每个 kafka 主题创建 2 个流
#1.
CREATE STREAM streamA
(id VARCHAR)
WITH (KAFKA_TOPIC='topicA', VALUE_FORMAT='JSON');
#2.
CREATE STREAM streamB
(id VARCHAR,
date VARCHAR,
count INT)
WITH (KAFKA_TOPIC='topicB', VALUE_FORMAT='JSON')
  1. 流加入创建 Kafka 主题
CREATE STREAM streamC
WITH (KAFKA_TOPIC='topicC', VALUE_FORMAT='JSON', PARTITIONS=5) AS
SELECT b.id AS `id`,
b.date AS `date`,
b.count AS `count`
FROM streamB b
INNER JOIN streamA a WITHIN 1 DAY
on b.id = a.id;

问题

在这种情况下,当我进行以下 2 个查询时,一个可以获取所有信息,但另一个不能。您是否知道为什么会发生这种情况或我的查询存在一些问题?

参考

以下查询返回预期结果。

# OK
ksql> select a.id as `id`, a.date as `date`, a.count as `count` from streamA a inner join streamB b within 1 day on a.id = b.id;
# 00000001 | 2020-06-22 | 3
# OK
ksql> print 'topicC' from beginning;
# {"ROWTIME":1592804456184,"ROWKEY":"00000001","date":"2020-06-22","count":3}

但是,以下查询返回意外查询。

# NG
ksql> select * from streamC;
# 1592804456184 | 00000001 | null | null
# (expected result)
# 1592804456184 | 00000001 | 2020-06-22 | 3

附加信息

ksql> DESCRIBE streamC;
Name                 : STREAMC
Field   | Type
-------------------------------------
ROWTIME | BIGINT           (system)
ROWKEY  | VARCHAR(STRING)  (system)
date    | VARCHAR(STRING)
count   | INTEGER
-------------------------------------
For runtime statistics and query details run: DESCRIBE EXTENDED <Stream,Table>;

您运行的是 Confluent Platform 版本 5.1.3 附带的 KSQL 版本,看起来您遇到了一个错误。 我没有找到涵盖您的确切问题的问题。但是,最新版本确实有涵盖类似使用模式的测试用例,因此我相信您的问题已经解决。 您需要做的就是升级到包含修复程序的版本。

我建议升级到 5.5.1 CP 版本、即将发布的 6.0.0 CP 版本或社区 0.10 ksqlDB 版本,因为我知道这些版本包含修复程序。

我在流表连接方面遇到了同样的问题。 我的表键与流键完全相同,但加入不起作用。

我正在运行最新版本的 confluent 5.5.1。

最新更新