9

我正在尝试使用这个 avro shcema

{
  "namespace": "nothing",
  "name": "myAvroSchema",
  "type": "record",
  "fields": [
    {
      "name": "checkInCustomerReference",
      "type": "string"
    },
    {
      "name": "customerContacts",
      "type": "record",
      "fields": [
        {
          "name": "customerEmail",
          "type": "array",
          "items": {
            "type": "record",
            "name": "customerEmail_element",
            "fields": [
              {
                "name": "emailAddress",
                "type": "string"
              },
              {
                "name": "typeOfEmail",
                "type": "string"
              }
            ]
          }
        },
        {
          "name": "customerPhone",
          "type": "array",
          "items": {
            "type": "record",
            "name": "customerPhone_element",
            "fields": [
              {
                "name": "fullContactNumber",
                "type": "string"
              },
              {
                "name": "ISDCode",
                "type": "string"
              }
            ]
          }
        },
        {
          "name": "DonotAskIndicator",
          "type": "record",
          "fields": [
            {
              "name": "donotAskDetails",
              "type": "string"
            }
          ]
        }
      ]
    },
    {
      "name": "somethingElseToCheck",
      "type": "string"
    }
  ]
}

使用 avro-tools 生成和 avro 文件:

avro-tools fromjson --schema-file myAvroSchema.avsc myJson.json > myAvroData.avro

但我收到以下错误消息:

线程“main”org.apache.avro.SchemaParseException 中的异常:“record”不是定义的名称。"customerContacts" 字段的类型必须是定义的名称或 {"type": ...} 表达式。

谁能告诉我为什么记录没有被识别为定义的名称?

4

2 回答 2

10

"customerContacts" 字段的类型必须是定义的名称或 {"type": ...} 表达式

看起来您没有正确定义嵌套记录。我复制了您的架构并提出了这个,试一试:

{  
    "type":"record",
    "name":"myAvroSchema",
    "namespace":"nothing",
    "fields":[  
        {  
            "name":"checkInCustomerReference",
            "type":"string"
        },
        {  
            "name":"customerContacts",
            "type":{  
                "type":"record",
                "name":"customerContacts",
                "namespace":"nothing",
                "fields":[  
                    {  
                        "name":"customerEmail",
                        "type":{  
                            "type":"array",
                            "items":{  
                                "type":"record",
                                "name":"customerEmail",
                                "namespace":"nothing",
                                "fields":[  
                                    {  
                                        "name":"emailAddress",
                                        "type":"string"
                                    },
                                    {  
                                        "name":"typeOfEmail",
                                        "type":"string"
                                    }
                                ]
                            }
                        }
                    },
                    {  
                        "name":"customerPhone",
                        "type":{  
                            "type":"array",
                            "items":{  
                                "type":"record",
                                "name":"customerPhone",
                                "namespace":"nothing",
                                "fields":[  
                                    {  
                                        "name":"fullContactNumber",
                                        "type":"string"
                                    },
                                    {  
                                        "name":"ISDCode",
                                        "type":"string"
                                    }
                                ]
                            }
                        }
                    },
                    {  
                        "name":"DonotAskIndicator",
                        "type":{  
                            "type":"record",
                            "name":"donotAskIndicator",
                            "namespace":"nothing",
                            "fields":[  
                                {  
                                    "name":"donotAskDetails",
                                    "type":"string"
                                }
                            ]
                        }
                    }
                ]
            }
        },
        {  
            "name":"somethingElseToCheck",
            "type":"string"
        }
    ]
}
于 2017-04-24T20:06:57.697 回答
0

您必须在使用之前定义记录。您可以在此处找到 awser(示例): 创建方案 .avsc Avro 中的问题

于 2017-04-20T07:51:30.203 回答