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

没有名称的Avro模式数组

夏飞鹏
2023-03-14

我想知道下面的模式对于Avro模式是否有效。请注意,字段数组的第一个对象中缺少名称。

{
  "name": "AgentRecommendationList",
  "type": "record",
  "fields": [
      {
          "type": {
              "type": "array",
              "items": {
                  "name": "friend",
                  "type": "record",
                  "fields": [
                      {
                          "name": "Name",
                          "type": "string"
                      },
                      {
                          "name": "phoneNumber",
                          "type": "string"
                      },
                      {
                          "name": "email",
                          "type": "string"
                      }
                  ]
              }
          }
      }
  ]
}

它实际上是针对以下类型的数据设计的

[
        {
            "Name": "1",
            "phoneNumber": "2",
            "email": "3"
        },
        {
            "Name": "1",
            "phoneNumber": "2",
            "email": "3"
        },
        {
            "Name": "1",
            "phoneNumber": "2",
            "email": "3"
        }
 ]

根据下面的阅读,似乎没有名字的数组是不允许的

Avro架构失败

There is no way to define and avro schema with an array without a field name.

https://avro.apache.org/docs/current/spec.html#schema_complex

name: a JSON string providing the name of the field (required), and

我怀疑下面是正确的

{
  "name": "AgentRecommendationList",
  "type": "record",
  "fields": [
      {
          "name": "friends",
          "type": {
              "type": "array",
              "items": {
                  "name": "friend",
                  "type": "record",
                  "fields": [
                      {
                          "name": "Name",
                          "type": "string"
                      },
                      {
                          "name": "phoneNumber",
                          "type": "string"
                      },
                      {
                          "name": "email",
                          "type": "string"
                      }
                  ]
              }
          }
      }
  ]
}

它应该有如下数据,以便成功进行avro转换

{
  "friends": [
      {
          "Name": "1",
          "phoneNumber": "2",
          "email": "3"
      },
      {
          "Name": "1",
          "phoneNumber": "2",
          "email": "3"
      },
      {
          "Name": "1",
          "phoneNumber": "2",
          "email": "3"
      }
  ]
}

下面的模式是否有效?在第一个示例中,这个目标是没有名称的数组。。。

{
  "name": "AgentRecommendationList",
  "type": "array",
  "items": {
      "name": "friend",
      "type": "record",
      "fields": [
          {
              "name": "Name",
              "type": "string"
          },
          {
              "name": "phoneNumber",
              "type": "string"
          },
          {
              "name": "email",
              "type": "string"
          }
      ]
   }
}

如果有人能证实我的理解,我将不胜感激。。。谢谢

共有1个答案

公孙高轩
2023-03-14

对于问题1。。。

你写的一切都是对的。正如您所提到的,第一个模式无效,因为记录中的每个字段都需要有一个名称。更正的架构有效,更正的数据适用于更新的架构。

对于问题2。。。

问题2中的模式是有效的,但是agentRecommissionList名称将被忽略。数组没有名称。在查看问题1中的示例后,这听起来可能有些奇怪,但在这些示例中,名称字段规范的一部分,而不是数组。

 类似资料:
  • 我有一个带有数组字段的AVRO模式。此数组字段包含作为另一个AVRO架构对象的项目。下面是我现在的代码。 此代码是“bars”的字段定义,它是一个包含“com.example.Bar”对象的数组。 我现在将默认设置为“null”,但是我想明确将默认值设置为3 Bar对象的数组。 假设我的酒吧有以下字段定义: 我想将“条”默认设置为 但是此代码不起作用。我应该如何设置对象的默认值?

  • 问题内容: 我是JSON的新手,请尝试使用本教程:http : //p-xr.com/android-tutorial- how-to-parse-read-json-data-into-a-android- listview/#comments 我是JSON,C语言,Java和Android的新手,但我正在学习。本教程使用的是我所说的命名数组,但是我将在我的android项目中使用的所有JSON

  • 因此,我们计划使用Avro在融合的Kafka生态系统上进行交流。我目前对Avro的理解是,每条消息都有自己的模式。如果是这样的话,我们需要模式注册表来解决版本更新吗? 我问,因为在每条消息中携带模式可以防止需要像模式注册表这样的东西来将消息ID映射到模式。还是我在这里错过了什么?

  • 问题内容: 我有一个Json Array作为没有名称的字符串,我想解析它如何在android中进行? 我的JsonArray是: 问题答案: 试试这个..

  • 我们使用Apache Kafka(不是confluent Kafka)0.10。我们想用Kafka设置AVRO模式。我有如下的avro模式。 序列化消息, 这正像预期的那样起作用。 但是,希望在主题级别设置一个Avro模式,这样,如果消息不符合Avro模式,主题将拒绝消息。 不管怎么说,我可以用阿帕奇Kafka0.10做到这一点。

  • 我有一个avro架构,我想从中提取所有字段名称。有什么办法可以做到这一点吗? 测试架构是这样的: 这是代码: 以上是这样打印出来的: 但我希望它只返回数组列表中的“左”和“右”,而不返回其他内容。现在,它还返回类型和pos,我不需要它们。有什么办法可以做到吗?