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 的字段下。

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

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

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

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

    • 对于文档,它描述模式名称。此模式名称与命名空间一起唯一标识存储中的模式(Namespace.schema name)。在上面的示例中,模式的全名将是 Tutorialspoint.Employee。

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

Avro 的基本数据类型

Avro 模式具有基本数据类型和复杂数据类型。下表描述了 Avro 的基本数据类型

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

Avro 的复杂数据类型

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

记录

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

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

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

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

  • fields - 此字段保存一个 JSON 数组,其中包含模式中所有字段的列表,每个字段都具有 name 和 type 属性。

示例

下面是一个记录的示例。

{
" 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" } 
   ] 
}

固定

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

示例

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