簡體   English   中英

KSQL 可以使用模式中提供的默認值填充流嗎?

[英]Can KSQL populate streams with default values provided in the schema?

我有一個 KSQL 流,我想用模式中指定的默認值填充它。 除了用 coalesce 語句再次手動指定它們之外,有沒有辦法做到這一點?

先前回答的問題與我面臨的問題類似,但它沒有解決使用模式中已指定的默認值的要點:

使用列的默認值創建 KSQL 流?

我做了以下操作(基於 Confluent 提供的文檔: https ://docs.confluent.io/platform/current/schema-registry/serdes-develop/serdes-avro.html#schema-references-in-avro ):

  1. 使用模式創建主題 t1-a
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"}]}
  1. 將主題的兼容性設置為 FULL(使用模式注冊表 REST API)
  2. 使用 CLI 工具為主題生成記錄
{"name":"john"}
{"name":"doe"}
  1. 使用模式注冊表更新了模式
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"}]}
  1. 使用 CLI 工具生成主題記錄:
{"name":"jack", "age":"100"}
{"name":"jill", "age":"101"}
  1. 啟動 ksql cli 並創建一個流
CREATE STREAM t1_a WITH (KAFKA_TOPIC='t1-a',VALUE_FORMAT='AVRO');
  1. 查詢記錄:
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM