- AVRO 基础
- AVRO - 首页
- AVRO - 概述
- AVRO - 序列化
- AVRO - 环境设置
- AVRO 模式 & API
- AVRO - 模式
- AVRO - 参考 API
- 通过生成类使用 AVRO
- 通过生成类进行序列化
- 通过生成类进行反序列化
- 使用解析器库的 AVRO
- 使用解析器进行序列化
- 使用解析器进行反序列化
- AVRO 有用资源
- AVRO - 快速指南
- AVRO - 有用资源
- AVRO - 讨论
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}