簡體   English   中英

未應用布爾值的 avro 默認值

[英]avro default value for boolean not applied

我有這個 avro 模式,其中我將捕獲聲明為 boolean ,我想將默認值設置為true

{
    "namespace": "abc",
    "type": "record",
    "name": "Request",
    "fields": [
        {
            "name": "amount",
            "type": "long",
        },
        {
            "name": "currency",
            "type": ["string", "null"],
        },
        {
            "name": "capture",
            "type": "boolean",
            "default": true
        } 
}

當它在 Java 中使用時,它獲得默認值null 我需要做什么才能將其默認為true

這不僅僅與Java有關。 一般來說(根據https://avro.apache.org/docs/current/spec.html提供的文檔)我們有:

default: A default value for this field, used when reading instances that lack this field (optional)

因此默認值僅用於模式演變,因此當您使用不同的模式讀/寫記錄時。 例如,假設您想讀取使用模式 A1 編寫的記錄,而不是使用進化模式 A2 和捕獲字段,並且已通過模式 A2 引入(因此它不存在於模式 A1 中)。 因此,您讀取的記錄包含該變量的模式 A2 的默認值。


為了進行測試,我分別從一個模式中生成了兩個Java類,其中一個布爾字段的默認值為“true”和“false”。 除了 Avro 模式定義之外,生成的類是相同的 這確認默認值未反映在源代碼中。

我也試過Golang ,結果是一樣的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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