AVRO - 架构

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的原始数据类型;

数据类型描述
nullNull是一种没有价值的类型.
int32位有符号整数.
long64位有符号整数.
float单精度(32位)IEEE 754浮点数字.
double双精度(64位)IEEE 754浮动-point number.
bytes8位无符号字节序列.
stringUnicode字符序列.

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}