【问题标题】:Multiple keys or Foreign keys in KSQLKSQL 中的多个键或外键
【发布时间】:2021-03-15 03:46:55
【问题描述】:

如何在 KSQL 中执行 1 -> N 关系

我有一个以 bob_id 作为主键的表,还有另一个表将有多个以 foo_id 作为主键和 bob_id 作为外键的行。

我如何使用 KSQL 来复制这种情况?

据我所知,KSQL 没有外键。

除非列是主键,否则我们无法在 ksql 中连接表。

重新分区不起作用,因为我使用的是表而不是流。

【问题讨论】:

    标签: apache-kafka ksqldb


    【解决方案1】:

    您可以根据需要重新分区主题以更改密钥,see this example here

    Here is some good reference material关于如何在 KSQL 中进行不同类型的连接

    【讨论】:

    • 如果我对主题进行重新分区,那么数据将会丢失,例如,我对每个键都有 1:n 的关系,我需要它在那里,所以 (primary_key + repititive 外键) 必须是关键..
    • 我们也可以在流中更新吗? [confluent.io/stream-processing-cookbook/ksql-recipes/… 在此他们正在使用流,但它使用相同的主键保留数据......这正常吗?还是我做错了什么?
    • 而且流也有创建流...选择...分区...但是我正在使用表并且表没有按子句分区,有什么方法可以实现1: KSQL 中的 n 关系
    • 这个答案具有误导性,@ayshwarya 是正确的。在当前文档中,它明确声明不支持一对多连接:docs.confluent.io/current/ksql/docs/developer-guide/…
    【解决方案2】:

    我不确定您是否能够在实践中做到这一点,因为我目前在远程操作时遇到了一些麻烦similar

    但我会解释你在放弃之前应该尝试什么。我真的希望我们都能找到办法。

    重新分区不起作用,因为我使用的是表而不是流。

    首先,至少根据您的解释,这与重新分区无关。这是关于重新输入密钥的。重新分区意味着更改分区数量以对齐多个集合(表或流)以便能够加入它们。

    因此,当您需要重新加密时,您可以先创建一个重新加密的流(例如CREATE AS SELECT ... PARTITION BY),然后从该流创建一个表。直接从主题创建表会更好,因为它也是materialized

    然后,虽然不支持一对多连接,但您似乎没有要求它们。所以,LEFT OUTER 加入应该可以。

    但这甚至不是我决定回答这个问题的主要原因。我想补充一下,因为我自己对此感到兴奋,Kafka Streams 已经 support joins by foreign keys
    rumor 拥有它,ksqlDB 的类似功能也在开发中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2010-09-05
      • 2016-12-03
      • 1970-01-01
      相关资源
      最近更新 更多