【问题标题】:Default values to null in an avro schema, should it be "null" or null?在 avro 模式中默认值为 null,它应该是“null”还是 null?
【发布时间】:2019-08-16 07:41:18
【问题描述】:

我是 Avro 的新手,正在尝试定义模式。想知道我是否试图将一个值默认为 null,应该是:

一个。 “默认”:空

b. “默认”:“空”

数据类型是什么重要吗?像 int 那么默认值将是“default”:null,但是当它是一个字符串时,默认值应该是“default”:“null”?还是没关系?

【问题讨论】:

  • 如果类型是字符串并且想设置默认值,那么使用双引号作为默认值。

标签: java scala avro


【解决方案1】:

要将值默认为 null,您必须指定 "default": null。有关每种类型的示例值,请参阅规范的 Complex Types 部分中的表格。

数据类型是什么重要吗?

是的,类型很重要。正如您在规范的Primitive Types 部分中看到的,null 是它自己的类型。您不能将intstring 或任何其他原始类型设置为null

如果您想要一个“可空”字段,请使用Unions。例如:

{ "type": ["null", "int"], "default": null }

这表明该数据可能是int,也可能是null。默认为null。为联合指定默认值时,请记住默认值必须与联合中的第一个类型匹配。

来自the specification

(请注意,当为类型为联合的记录字段指定默认值时,默认值的类型必须与联合的第一个元素匹配。因此,对于包含“null”的联合,“null”通常首先列出,因为此类联合的默认值通常为 null。)

【讨论】:

  • 感谢您的回复。只是为了确认 - 是否像@Ravi 提到的那样,如果类型是字符串,那么默认值应该设置为 "default": "null" 带引号?
  • @kodeWithKT,是的。如果类型是字符串,并且您希望默认值为值为“null”的字符串。请注意,这不是 null,它是一个表示“null”的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 2018-08-23
  • 2015-06-19
  • 2021-08-14
  • 2012-01-18
  • 2018-11-17
  • 1970-01-01
相关资源
最近更新 更多