[英]Can KSQL populate streams with default values provided in the schema?
我有一個 KSQL 流,我想用模式中指定的默認值填充它。 除了用 coalesce 語句再次手動指定它們之外,有沒有辦法做到這一點?
先前回答的問題與我面臨的問題類似,但它沒有解決使用模式中已指定的默認值的要點:
我做了以下操作(基於 Confluent 提供的文檔: https ://docs.confluent.io/platform/current/schema-registry/serdes-develop/serdes-avro.html#schema-references-in-avro ):
kafka-avro-console-producer --bootstrap-server localhost:9092 --property schema.registry.url=http://localhost:8081 --topic t1-a \
--property value.schema='{"type":"record","name":"myrecord","fields":[{"name":"name","type":"string","default":"no-name"}]}
{"name":"john"}
{"name":"doe"}
kafka-avro-console-producer --bootstrap-server localhost:9092 --property schema.registry.url=http://localhost:8081 --topic t1-a \
--property value.schema='{"type":"record","name":"myrecord","fields":[{"name":"name","type":"string", "default":"no-name"}, {"name":"age","type":"string", "default":"ageless-wonder"}]}
{"name":"jack", "age":"100"}
{"name":"jill", "age":"101"}
CREATE STREAM t1_a WITH (KAFKA_TOPIC='t1-a',VALUE_FORMAT='AVRO');
SELECT * FROM t1_a;
現在我得到了記錄,但是 John 和 Doe 的 Age 中的值被列為 null(而不是模式中指定的默認值“ageless-wonder”):
NAME AGE
john null
doe null
jack 100
jill 101
我知道我可以將流定義中的值合並為默認值,但是有沒有辦法根據已經提供的模式填充該字段?
Ksql 使用最初與數據一起發送的模式 ID,而不是最新的,來反序列化記錄並構建每一行。 您需要使用默認年齡定義您的第一個模式,然后在沒有默認年齡的情況下發送。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.