Avro Schema
Avro数据块的结构在Avro Schema中指定。它指定需要哪些数据字段以及如何表示值。您可以在此处找到有关Avro Schema及其规范的信息。
请注意以下几点:
•Avro Schema以JSON格式创建
•Avro Schema可以是:JSON字符串、JSON对象或JSON数组
•Avro Schema可以包含四个特性:name、namespace、type和fields
•有八种基元数据类型:null、boolean、int、long、float、double、bytes和string
•有六种复杂类型:records、enums、arrays、maps、unions和fixed
•基元类型没有特性;每个复杂类型都有自己的特性集
有关Avro Schema的更多信息,请参见Avro Schema规范。
示例
下方给出了一些简单的Avro Schema示例,每个示例都包含相应的JSON格式的Avro数据片段。请注意,Schema定义了一个特定的结构。在某些情况下,当定义的结构被多次实例化时,生成的输出可能不是有效的JSON文档。例如,可以在Schema中定义JSON对象的结构。如果JSON对象被多次实例化,则根据Avro Schema,每个单独的对象都可能是有效的,但是整个文档将不是有效的JSON文档,因为没有容器对象。如果需要有效的JSON文档,您可能需要重新编写Avro Schema来验证JSON对象数组。请比较下方的示例4和示例5。
该Schema是一个单个字符串,它指定了数据块必须包含一个类型为Avro (int)基元数据类型的值:"int"
有效Avro:2016 无效Avro:"2016"
|
该Schema与上一个Schema指定的内容完全相同,但它是一个JSON对象。数据块必须包含一个类型为Avro (int)基元数据类型的值: { "type": "int" }
有效Avro:2016 无效Avro:"2016"
|
该Schema是一个指定整数数组的JSON对象: { "type": "array", "items": "int" }
有效Avro:[2016, 2017] 有效Avro:[2016] 有效Avro:[2016] 无效Avro:2016, 2017
|
该Schema是一个指定单个记录的JSON对象: { "type": "record", "name": "ages", "fields" : [ {"name": "name", "type": "string"}, {"name": "age", "type": "int"} ] }
有效Avro:{"name":"John", "age":35}
|
该Schema是一个JSON对象,它指定了一个由记录项组成的数组,其中每一项都必须是一个JSON对象: { "type": "array", "items": { "type": "record", "name": "ages", "fields" : [ {"name": "name", "type": "string"}, {"name": "age", "type": "int"} ] } }
有效Avro:[{"name":"Mary", "age":34}, {"name":"John", "age":35}]
|
Avro Schema文件类型
如果您希望使用XMLSpy中Avro相关的编辑和验证功能,XMLSpy必须能够将文件识别为Avro Schema。如果一个文件的扩展名在XMLSpy的“选项”对话框(工具 | 选项 | 文件类型)中被定义为Avro Schema,则文件将被识别为Avro Schema。XMLSpy的默认设置将带有一个文件扩展名—.avsc—的文件视为Avro Schema文件。如果您希望创建指定Avro Schema文档的其他文件扩展名,请将这些文件扩展名作为Avro Schema扩展名添加到“选项”对话框的列表中。
创建和编辑Avro Schema
在XMLSpy中,您可以通过将Avro Schema文件扩展名指定为其文件类型来将一个新文件创建为Avro Schema。XMLSpy在您输入时提供智能编辑功能。这些包括上下文相关的关键词建议、自动输入括号对和引号对、语法着色和自动完成关键词。此外,还有三个输入助手:JSON属性、JSON值和JSON实体。在这些输入助手中可用的条目都是上下文相关的。双击一个条目会将其插入到当前光标位置。然后您可以使用验证 | 验证XML(F8)菜单命令根据Avro Schema规范对文件进行验证。