Avro是一个基于模式的序列化实用程序,它接受模式作为输入.尽管有各种模式可供使用,但Avro遵循自己的定义模式的标准.这些模式描述了以下细节 :
文件类型(默认记录)
记录的位置
记录的名称
记录中的字段及其对应的数据类型
使用这些模式,您可以使用更少的空间以二进制格式存储序列化值.存储这些值时没有任何元数据.
创建Avro架构
Avro架构是以JavaScript Object Notation(JSON)文档格式创建的,它是一种轻量级的基于文本的数据交换格式.它是以下列方式之一创建的;<
JSON字符串
A JSON对象
JSON数组
示例 : 以下示例显示了一个模式,该模式在名称空间Tutorialspoint下定义了一个文档,名称为Employee,具有字段名称和年龄.
{ "type" : "record", "namespace" : "Tutorialspoint", "name" : "Employee", "fields" : [ { "name" : "Name" , "type" : "string" }, { "name" : "Age" , "type" : "int" } ]}
在这个例子中,您可以观察到每个记录有四个字段并且减去;
输入 : 此字段位于文档下以及名为字段的字段下.
如果是文档,则显示文档的类型,通常是一个记录,因为有多个字段.
当它是字段时,类型描述数据类型.
名称空间 : 此字段描述对象所在的命名空间的名称.
name : 该字段位于文档下以及名为字段的字段下.
如果是文档,则描述架构名称.此模式名称与命名空间一起唯一标识存储中的模式( Namespace.schema名称).在上面的示例中,架构的全名将是Tutorialspoint.Employee.
如果是字段,则描述字段的名称.
Avro的原始数据类型
Avro架构具有原始数据类型以及复杂的数据类型.下表描述了Avro&minus的原始数据类型;
数据类型 | 描述 |
---|---|
null | Null是一种没有价值的类型. |
int | 32位有符号整数. |
long | 64位有符号整数. |
float | 单精度(32位)IEEE 754浮点数字. |
double | 双精度(64位)IEEE 754浮动-point number. |
bytes | 8位无符号字节序列. |
string | Unicode字符序列. |
Avro的复杂数据类型
除原始数据类型外,Avro还提供六种复杂数据类型,即记录, Enums,Arrays,Ma ps,Unions和Fixed.
记录
Avro中的记录数据类型是多个属性的集合.它支持以下
属性 :
name : 该字段的值包含记录的名称.
命名空间 : 该字段的值包含存储
对象的命名空间的名称.type : 此属性的值包含文档的类型(记录)或模式中字段的数据类型.
字段 : 该字段包含一个JSON数组,该数组包含模式中所有字段的列表,每个字段都有名称和类型属性.
示例
以下是记录示例.
{" type " : "record"," namespace " : "Tutorialspoint"," name " : "Employee"," fields " : [ { "name" : " Name" , "type" : "string" }, { "name" : "age" , "type" : "int" } ]}
枚举
枚举是集合中的项目列表,Avro枚举支持以下属性 :
name : 该字段的值包含枚举的名称.
命名空间 : 此字段的值包含限定枚举名称的字符串.
符号 : 该字段的值将枚举符号保存为名称数组.
示例
下面给出了枚举的例子.
{ "type" : "enum", "name" : "Numbers", "namespace": "data", "symbols" : [ "ONE", "TWO", "THREE", "FOUR" ]}
数组
此数据类型定义具有单个属性项的数组字段.此items属性指定数组中项目的类型.
示例
{ " type " : " array ", " items " : " int " }
地图
map数据类型是键值对的数组,它将数据组织为键值对. Avro地图的
键必须是字符串.地图的值保存地图内容的数据类型.
示例
{"type":"map","values":"int"}
工会
只要字段具有一个或多个数据类型,就会使用union数据类型.它们表示为JSON数组.例如,如果字段可以是int或null,则union表示为["int","null"].
示例
以下是使用工会和减号的示例文件;
{ "type" : "record", "namespace" : "it1352", "name" : "empdetails ", "fields" : [ { "name" : "experience", "type": ["int", "null"] }, { "name" : "age", "type": "int" } ] }
固定
此数据类型用于声明可用于存储二进制数据的固定大小的字段.它具有字段名称和数据作为属性.名称包含字段的名称,大小包含字段的大小.
示例
{"type":"fixed","name":"bdata","size":1048576}