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

有没有可能在Avro模式中有一个可选字段(即该字段根本不出现在.json文件中)?

萧辰沛
2023-03-14

有没有可能在Avro模式中有一个可选字段(即该字段根本不出现在.json文件中)?

在我的Avro模式中,我有两个字段:

{"name": "author", "type": ["null", "string"], "default": null},
{"name": "importance", "type": ["null", "string"], "default": null},

在我的JSON文件中,这两个字段可以存在也可以不存在。

但是,当它们不存在时,我会收到一个错误(例如,当我使用avro-tools命令行客户端测试这样的JSON文件时):

Expected field name not found: author

我理解,只要字段名存在于JSON中,它就可以是nullstring值,但我要表达的是“如果这些字段名不存在,或者如果它们存在并且是null或string的话,这个JSON是有效的”。

这可以用Avro模式表达吗?如果是,怎么做?

共有2个答案

彭涵衍
2023-03-14

根据avro规范,这是可能的,使用default属性。

参见https://avro.apache.org/docs/1.8.2/spec.html

default:此字段的默认值,在读取缺少此字段的实例时使用(可选)。允许值取决于字段的架构类型,如下表所示。联合字段的默认值对应于联合中的第一个架构。

在您给出的示例中,您确实添加了值为“null”的默认属性,因此这应该可以工作。但是,支持它还取决于您用来阅读avro消息的库(c、c++、python、Java、c#、ruby等都有库)。也许(可能)您使用的库缺少这个特性。

茅和玉
2023-03-14

可以将默认属性定义为未定义的示例。因此可以跳过该字段。

{“name”:“first_name”,“type”:“string”,“default”:“undefined”},

在Avro中所有的领域都是管理的。如果希望它是可选的,则将其类型与NULL合并。示例:

  {
    "name": "username",
    "type": [
      "null",
      "string"
    ],
    "default": null
  },
 类似资料:
  • 我很感激你的帮助,我真的卡住了。 我试图在Kibana中创建一个简单的可视化,这是一个基于我的数据中的数字值(origin_file_size_bytes)的线图。当我试图添加一个可视化图时,我得到了这个错误: 没有兼容的字段:“test*”索引模式不包含以下任何字段类型:number或date 我的实际索引确实包含一个带数字的字段,我的数据也是如此。 谢谢你的帮助! 安德鲁 下面是Discove

  • 我目前正在开发一个程序,在我的子类中,我需要一个无参数构造函数,用空字符串初始化对象。 我尝试过使用super,我有setter和getter方法,但我一直得到“field Person.name不可见”。我得到这个地址和电话号码以及。 如何使其可见,并且我可以在不提供构造函数参数的情况下初始化对象?如果我做错了什么并需要修复某些内容,请告诉我(:

  • 问题内容: 在我们的应用程序中,我们需要具有只能分配一次的字段。 最初,我们想到封装字段并将设置程序设为私有。但是,引起一些问题: 如果没有公共设置者,Hibernate是否仍然可以从数据库映射字段? 我是否可以剥离设置器并使字段仅在实体构造函数中可变? 最后,是否有任何标准的JPA方法使字段不变? 提前致谢。 问题答案: 广告。1:我相信,如果将注释放在字段而不是在getter上,则JPA会将普

  • 我想格式化一个<code>java.time。LocalTime,但格式可以根据其值而变化: 如果一天中的小时数为12或0,请使用格式 否则,请使用格式 我当然可以这样做: 但为此,我需要创建两个不同的格式化程序。 我只想使用一个可以多次重用的格式化程序: 我正在尝试使用来做到这一点: 我尝试使用< code > datetimeformatterbuilder . optional start(

  • EDIT--显示对象类,在initialize方法中添加代码,删除以前的filter方法,并从FXML中删除TextField的OnAction。--- 我第一次试图解决这个问题的尝试导致了许多Android问题,所以我在这里。 我使用JavaFX、Scenebuilder和FXML制作了一个简单的GUI。这个GUI模拟工厂车间的库存,可以从添加到/删除/显示/保存到文件。它还应该根据用户在中输入

  • 问题内容: 在Golang中,JSON结构标记可以使用多个名称吗? 问题答案: 请参阅如何在结构中定义多个名称标签,以了解如何在一个结构字段上定义多个标签。 您也可以使用a 代替您的结构。 或者,您可以在结构中使用这两种类型,并使用make方法将返回正确的模式。