Avro 简明教程

AVRO - Schemas

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

  1. 文件类型(默认为记录)

  2. location of record

  3. name of the record

  4. 记录中的字段及其相应的数据类型

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

Creating Avro Schemas

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

  1. A JSON string

  2. A JSON object

  3. A JSON array

Example - 下面的示例显示了一个模式,它在名称空间 Tutorialspoint 下定义了一个名为 Employee 的文档,该文档具有字段名称和年龄。

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

在这个示例中,你可以观察到每条记录有四个字段 -

  1. type - 这个字段在文档和名为字段的字段之下。在文档的情况下,它显示文档的类型,通常是记录,因为有多个字段。当它是字段时,类型描述数据类型。

  2. namespace - 这个字段描述对象所在名称空间的名称。

  3. name - 这个字段在文档和名为字段的字段之下。在文档的情况下,它描述模式名称。这个模式名称和名称空间一起,在存储中唯一地标识模式 ( Namespace.schema name )。在上面的示例中,模式的完整名称将是 Tutorialspoint.Employee。在字段的情况下,它描述字段的名称。

Primitive Data Types of Avro

Avro 模式既有原始数据类型,也有复杂数据类型。下表描述了 Avro 的 primitive data types -

Data type

Description

null

Null 是没有值的类型。

int

32-bit signed integer.

long

64-bit signed integer.

float

单精度(32 位)IEEE 754 浮点数。

double

双精度(64 位)IEEE 754 浮点数。

bytes

8 位无符号字节序列。

string

Unicode character sequence.

Complex Data Types of Avro

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

Record

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

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

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

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

  4. fields - 此字段保存一个 JSON 数组,其中包含模式中所有字段的列表,每个字段都有名称和类型属性。

Example

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

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

Enum

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

  1. name - 此字段的值保存枚举的名称。

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

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

Example

以下是枚举的示例。

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

Arrays

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

Example

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

Maps

地图数据类型是键值对的数组,它以键值对组织数据。Avro 地图的键必须是字符串。地图的值保存地图内容的数据类型。

Example

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

Unions

每当字段有一个或多个数据类型时,都会使用联合数据类型。它们表示为 JSON 数组。例如,如果一个字段可以是整数或 null,则联合表示为 ["int", "null"]。

Example

以下是使用联合的示例文档 −

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

Fixed

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

Example

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