如何为嵌套集合创建avro架构?

时间:2018-03-13 08:25:15

标签: java avro jsonschema

我确实有这样的身体 -

{
    {
        "name":"abc",
        "eventName": "abc",
        "pl": {
             "name": "xyz",
             "age": 21,
             "address": {
                 "line1" : "h.no - ",
                 "line2": "state"
             }
         }
    }
}

任何人都可以帮我为这种身体创建一个有效的Avro架构。 我找到了一个创建嵌套模式的例子 -

[
{
"type": "record",
"name": "Address",
"fields": [
  {
    "name": "streetaddress",
    "type": "string"
  },
  {
    "name": "city",
    "type": "string"
  }
]
 },


 {
"type": "record",
"name": "person",
"fields": [
  {
    "name": "firstname",
    "type": "string"
  },
  {
    "name": "lastname",
    "type": "string"
  },
  {
    "name": "address",
    "type": "Address"
  }
]

} ]

当我提供这种模式时,它在下面的行中提供了错误 -

GenericRecord avroRecord = new GenericData.Record(schema);

错误是 - org.apache.avro.AvroRuntimeException:不是记录架构:

1 个答案:

答案 0 :(得分:0)

您可以像这样定义记录以支持嵌套对象。

{

    "type": "record",
    "name": "person",
    "fields": [{
            "name": "firstname",
            "type": "string"
        }, {
            "name": "lastname",
            "type": "string"
        }, {
            "name": "address",
            "type": {
                "type": "record",
                "name": "Address",
                "fields": [{
                        "name": "streetaddress",
                        "type": "string"
                    }, {
                        "name": "city",
                        "type": "string"
                    }
                ]
            }
        }
    ]
}