相关疑难解决方法(0)

Avro:当我不知道“作者”使用的确切架构时,如何使用默认字段

在 Java Avro 中,如何将下面的data1data2data3解析为GenericRecord

//Schema
{
    "type": "record", "name": "user",
    "fields": [
        {"name": "name", "type": "string"},
        {"name": "colour", "type": "string", "default": "green"},
        {"name": "mass", "type": "int", "default": 100}
    ]
}
//data 1
{"name":"Sean"}
//data 2
{"name":"Sean", "colour":"red"}
//data 3
{"name":"Sean", "colour":"red", "mass":200}
Run Code Online (Sandbox Code Playgroud)

我看过一些关于模式演变等的讨论,以及将作者模式读者模式传递给 GenericDatumReader 和 ResolvingDecoder 的能力,但我只有一个模式。一般来说,我不知道作者使用了什么确切的模式(如果有的话)。

我可以通过解析架构并删除所有具有默认值的字段来“推断”一个“基本”架构。但是,如果有多个具有默认值的字段,某些字段可能/可能不存在,因此我将无法推断出与数据兼容的架构。

例如

  • 如果我使用给定的模式尝试使用GenericDatumReader读取data3, 则解析成功。
  • 如果我尝试使用推断的模式使用GenericDatumReader读取data1, 则解析成功。
  • 如果我使用推断的模式和给定的模式尝试使用ResolvingDecoder 的GenericDatumReader来读取data1,则解析成功。
  • 所有其他选项都无法将data1 …

java json avro

6
推荐指数
0
解决办法
1955
查看次数

标签 统计

avro ×1

java ×1

json ×1