当前位置: 首页 > 知识库问答 >
问题:

Avro架构格式异常-“记录”不是定义的名称

太叔乐家
2023-03-14

我想用这个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工具生成和编辑avro文件:

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

但我收到了以下错误信息:

线程“main”组织中出现异常。阿帕奇。阿夫罗。SchemaParseException:“记录”不是定义的名称。“customerContacts”字段的类型必须是已定义的名称或{“类型”:表示

有人能告诉我为什么记录没有被定义为一个名字吗?

共有2个答案

葛炯
2023-03-14

你必须在使用记录之前定义它。您可以在这里找到awser(示例):创建scheme时的问题。avsc Avro

司寇阳曦
2023-03-14

“customerContacts”字段的类型必须是已定义的名称或{“类型”:表示

看起来不像您正确定义嵌套记录。我复制了您的模式并提出了这个,试试看:

{  
    "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"
        }
    ]
}
 类似资料:
  • 我正在尝试使用这个avro模式 要使用avro工具生成和编辑avro文件: 但我收到了以下错误信息: 线程"main"org.apache.avro.SchemaParseException中的异常:"Security分类"不是已定义的名称。"security分类"字段的类型必须是已定义的名称或{"type":...}表达式。 谁能告诉我,为什么SecurityClassification没有被定

  • 我有一个问题,我的记录json可以为null。如何处理avro模式中的空记录?给出的文档是针对我想要为null记录获取的null属性的。

  • 我得到了一个定义字段的警告: 我试图将其更改为: 现在它根本不起作用,因为模式无效。 错误: 知道怎么解决吗?

  • 使用NiFi 1.7.1(使用Java Avro 1.8.1)和AvroSchemaRegistry,我试图定义一个模式,其中包含和位于顶层。根据Avro文档[1],我假设我可以像普通的一样定义全名,但我在:app中遇到了错误。确实,全名的名称部分不允许点,但根据文档:“如果指定的名称包含点,则假定它是全名…” 然后我尝试使用命名空间字段。使用以下模式: 我遇到了以下错误: 最终,我希望能够定义这

  • 我正在尝试为下面的json创建avro模式 错误对象是可选的,它可能是“错误”:{}下面是没有默认值的avro模式 如何在json中添加错误字段的默认值{}。

  • 我使用的是NiFi(v1.2)处理器ConvertJSONToAvro。我无法解析一个“记录”类型中仅包含2个元素中的1个元素的记录。数据中也允许完全缺少该元素。我的Avro模式不正确吗? 架构片段: 如果“personname”同时包含“first”和“last”,它就可以工作,但是如果它只包含其中一个元素,它就会失败,错误是:无法转换字段personname:无法解析联合:{“last”:“S