使用KSQL创建表时PrimayKey的可能选项?

时间:2019-03-14 12:04:33

标签: apache-kafka ksql

我已经开始与KSQL一起工作,并且非常有经验。我正在尝试使用表和流联接,情况如下。 我有一个这样的样本数据集:

"0117440512","0134217727","US","United States","VIRGINIA","Vienna","DoD Network Information Center"
"0134217728","0150994943","US","United States","MASSACHUSETTS","Woburn","Genuity"

在我的卡夫卡主题1中。是将静态数据集加载到Table,并且可能在一个月左右的时间里更新一次。

我还有另外一个数据集,例如:

{"state":"AD","id":"020","city":"Andorra","port":"02","region":"Canillo"}
{"state":"GD","id":"024","city":"Arab","port":"29","region":"Ordino"}

在kafka主题2中。是将数据流加载到流中吗?

由于无法在未指定键的情况下创建Table,因此我的数据没有唯一的列。因此,在将数据从topic-1加载到Table时,我的密钥到底应该是什么?请记住,我的表可能每个月使用相同的数据进行填充/更新一次,并且也一次使用新的数据进行更新。加载新数据后,我可以用密钥替换它们。

我尝试查找是否有类似增量值(在SQL中称为PrimaryKey),但没有找到。

有人可以帮助我更正我的实现方法或查询以创建PrimaryKey(如果存在)的方法。谢谢

1 个答案:

答案 0 :(得分:0)

不,KSQL没有自增量密钥的概念。在将数据生成到定义KSQL表的主题中时,必须定义键。

---编辑

如果要在通过Kafka Connect接收的消息上设置密钥,则可以使用单消息转换(SMT)。

            "transforms":"createKey,extractInt",
            "transforms.createKey.type":"org.apache.kafka.connect.transforms.ValueToKey",
            "transforms.createKey.fields":"id",
            "transforms.extractInt.type":"org.apache.kafka.connect.transforms.ExtractField$Key",
            "transforms.extractInt.field":"id"

See here了解更多详情。