AVRO – 模式
AVRO – 模式
Avro 是一个基于模式的序列化实用程序,接受模式作为输入。尽管有各种模式可用,但 Avro 遵循自己的模式定义标准。这些模式描述了以下细节 –
- 文件类型(默认记录)
- 记录位置
- 记录名称
- 记录中的字段及其对应的数据类型
使用这些模式,您可以使用更少的空间以二进制格式存储序列化值。这些值在没有任何元数据的情况下存储。
创建 Avro 架构
Avro 架构以 JavaScript 对象表示法 (JSON) 文档格式创建,这是一种基于文本的轻量级数据交换格式。它是通过以下方式之一创建的 –
- 一个 JSON 字符串
- 一个 JSON 对象
- 一个 JSON 数组
示例– 以下示例显示了一个模式,它在名称空间 Tutorialspoint 下定义了一个文档,名称为 Employee,具有字段名称和年龄。
{ "type" : "record", "namespace" : "Tutorialspoint", "name" : "Employee", "fields" : [ { "name" : "Name" , "type" : "string" }, { "name" : "Age" , "type" : "int" } ] }
在此示例中,您可以观察到每条记录有四个字段 –
-
type – 此字段位于文档下以及名为字段的字段下。
-
在文档的情况下,它显示文档的类型,通常是一条记录,因为有多个字段。
-
当它是字段时,类型描述数据类型。
-
-
namespace – 该字段描述了对象所在的命名空间的名称。
-
name – 此字段位于文档下以及名为字段的字段下。
-
在文档的情况下,它描述模式名称。此架构名称与命名空间一起,唯一标识存储中的架构 ( Namespace.schema name )。在上面的示例中,模式的全名将是 Tutorialspoint.Employee。
-
在字段的情况下,它描述字段的名称。
-
Avro 的原始数据类型
Avro 模式具有原始数据类型和复杂数据类型。下表描述了Avro的原始数据类型–
Data type | 描述 |
---|---|
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 数组,其中包含架构中所有字段的列表,每个字段都有名称和类型属性。
例子
下面给出了一个记录的例子。
{ " type " : "record", " namespace " : "Tutorialspoint", " name " : "Employee", " fields " : [ { "name" : " Name" , "type" : "string" }, { "name" : "age" , "type" : "int" } ] }
枚举
枚举是集合中的项目列表,Avro 枚举支持以下属性 –
-
name – 此字段的值包含枚举的名称。
-
namespace – 此字段的值包含限定枚举名称的字符串。
-
符号– 此字段的值将枚举的符号保存为名称数组。
例子
下面给出了一个枚举的例子。
{ "type" : "enum", "name" : "Numbers", "namespace": "data", "symbols" : [ "ONE", "TWO", "THREE", "FOUR" ] }
数组
这种数据类型定义了一个具有单个属性项的数组字段。此项目属性指定数组中项目的类型。
例子
{ " type " : " array ", " items " : " int " }
地图
map 数据类型是一个键值对数组,它将数据组织为键值对。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}