【发布时间】:2021-03-15 03:46:55
【问题描述】:
如何在 KSQL 中执行 1 -> N 关系
我有一个以 bob_id 作为主键的表,还有另一个表将有多个以 foo_id 作为主键和 bob_id 作为外键的行。
我如何使用 KSQL 来复制这种情况?
据我所知,KSQL 没有外键。
除非列是主键,否则我们无法在 ksql 中连接表。
重新分区不起作用,因为我使用的是表而不是流。
【问题讨论】:
标签: apache-kafka ksqldb
如何在 KSQL 中执行 1 -> N 关系
我有一个以 bob_id 作为主键的表,还有另一个表将有多个以 foo_id 作为主键和 bob_id 作为外键的行。
我如何使用 KSQL 来复制这种情况?
据我所知,KSQL 没有外键。
除非列是主键,否则我们无法在 ksql 中连接表。
重新分区不起作用,因为我使用的是表而不是流。
【问题讨论】:
标签: apache-kafka ksqldb
您可以根据需要重新分区主题以更改密钥,see this example here
Here is some good reference material关于如何在 KSQL 中进行不同类型的连接
【讨论】:
我不确定您是否能够在实践中做到这一点,因为我目前在远程操作时遇到了一些麻烦similar。
但我会解释你在放弃之前应该尝试什么。我真的希望我们都能找到办法。
重新分区不起作用,因为我使用的是表而不是流。
首先,至少根据您的解释,这与重新分区无关。这是关于重新输入密钥的。重新分区意味着更改分区数量以对齐多个集合(表或流)以便能够加入它们。
因此,当您需要重新加密时,您可以先创建一个重新加密的流(例如CREATE AS SELECT ... PARTITION BY),然后从该流创建一个表。直接从主题创建表会更好,因为它也是materialized。
然后,虽然不支持一对多连接,但您似乎没有要求它们。所以,LEFT OUTER 加入应该可以。
但这甚至不是我决定回答这个问题的主要原因。我想补充一下,因为我自己对此感到兴奋,Kafka Streams 已经 support joins by foreign keys。
rumor 拥有它,ksqlDB 的类似功能也在开发中。
【讨论】: