AVRO - 模式

Avro 是一种基于模式的序列化实用程序,它接受模式作为输入。尽管有各种模式可用,但 Avro 遵循其自己的定义模式的标准。这些模式描述了以下详细信息 −

  • 文件类型(默认为记录)
  • 记录位置
  • 记录名称
  • 记录中的字段及其相应的数据类型

使用这些模式,您可以使用更少的空间以二进制格式存储序列化值。这些值存储时没有任何元数据。

创建 Avro 模式

Avro 模式以 JavaScript 对象表示法 (JSON) 文档格式创建,这是一种基于文本的轻量级数据交换格式。它可以通过以下方式之一创建 −

  • JSON 字符串
  • JSON 对象
  • JSON 数组

示例 − 以下示例显示了一个架构,该架构定义了一个文档,该文档位于名称空间 Tutorialspoint 下,名称为 Employee,包含字段 name 和 age。

{
   "type" : "record",
   "namespace" : "Tutorialspoint",
   "name" : "Employee",
   "fields" : [
      { "name" : "Name" , "type" : "string" },
      { "name" : "Age" , "type" : "int" }
   ]
}

在此示例中,您可以观察到每条记录有四个字段 −

  • type − 此字段位于文档下以及名为 fields 的字段下。

    • 对于文档,它显示文档的类型,通常是一条记录,因为有多个字段。

    • 当它是字段时,类型描述数据类型。

  • namespace − 此字段描述对象所在的命名空间的名称。

  • name − 此字段位于文档下以及名为 fields 的字段下。

    • 对于文档,它描述架构名称。此架构名称与命名空间一起唯一地标识了商店内的架构(Namespace.schema name)。在上面的示例中,架构的全名为 Tutorialspoint.Employee。

    • 对于字段,它描述字段的名称。

Avro 的原始数据类型

Avro 架构具有原始数据类型和复杂数据类型。下表描述了 Avro − 的原始数据类型

数据类型 描述
null Null 是一种没有值的类型。
int 32 位有符号整数。
long 64 位有符号整数。
float 单精度(32 位)IEEE 754 浮点数数字。
双精度 双精度(64 位)IEEE 754 浮点数。
字节 8 位无符号字节序列。
字符串 Unicode 字符序列。

Avro 的复杂数据类型

除了原始数据类型外,Avro 还提供六种复杂数据类型,即记录、枚举、数组、映射、联合和固定。

记录

Avro 中的记录数据类型是多个属性的集合。它支持以下属性 −

  • name − 此字段的值保存记录的名称。

  • namespace − 此字段的值保存存储对象的命名空间的名称。

  • type − 此属性的值保存文档(记录)的类型或架构中字段的数据类型。

  • fields − 此字段包含一个 JSON 数组,其中包含架构中所有字段的列表,每个字段都具有名称和类型属性。

示例

下面给出了一个记录的示例。

{
" type " : "record",
" namespace " : "Tutorialspoint",
" name " : "Employee",
" fields " : [
 { "name" : " Name" , "type" : "string" },
 { "name" : "age" , "type" : "int" }
 ]
}

枚举

枚举是集合中的项目列表,Avro 枚举支持以下属性 −

  • name − 此字段的值包含枚举的名称。

  • namespace − 此字段的值包含限定枚举名称的字符串。

  • symbols − 此字段的值将枚举的符号作为名称数组保存。

示例

下面给出了枚举的示例。

{
   "type" : "enum",
   "name" : "Numbers", 
   "namespace": "data", 
   "symbols" : [ "ONE", "TWO", "THREE", "FOUR" ]
}

数组

此数据类型定义具有单个属性 items 的数组字段。此 items 属性指定数组中项目的类型。

示例

{ " type " : " array ", " items " : " int " }

映射

映射数据类型是键值对的数组,它将数据组织为键值对。 Avro 映射的键必须是字符串。映射的值保存映射内容的数据类型。

示例

{"type" : "map", "values" : "int"}

联合

只要字段具有一个或多个数据类型,就会使用联合数据类型。它们以 JSON 数组的形式表示。例如,如果字段可以是 int 或 null,则联合表示为 ["int", "null"]。

示例

下面给出了使用联合的示例文档 −

{ 
   "type" : "record", 
   "namespace" : "tutorialspoint", 
   "name" : "empdetails ", 
   "fields" : 
   [ 
      { "name" : "experience", "type": ["int", "null"] }, { "name" : "age", "type": "int" } 
   ] 
}

fixed

此数据类型用于声明一个固定大小的字段,可用于存储二进制数据。它具有字段名称和数据作为属性。名称保存字段的名称,大小保存字段的大小。

示例

{ "type" : "fixed" , "name" : "bdata", "size" : 1048576}