Avro 简明教程
AVRO - Schemas
Avro 是基于模式的序列化工具,接收模式作为输入。尽管有各种模式可用,但 Avro 遵循其定义模式的自己的标准。这些模式描述以下详细信息 −
-
文件类型(默认为记录)
-
location of record
-
name of the record
-
记录中的字段及其相应的数据类型
使用这些模式,你可以使用更少的空间将序列化值存储在二进制格式中。这些值存储没有任何元数据。
Creating Avro Schemas
Avro 模式是在 JavaScript 对象表示法 (JSON) 文档格式中创建的,这是一种轻量级的基于文本的数据交换格式。它可以用以下方式创建 −
-
A JSON string
-
A JSON object
-
A JSON array
Example - 下面的示例显示了一个模式,它在名称空间 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。在字段的情况下,它描述字段的名称。
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 中的记录数据类型是多个属性的集合。它支持以下属性 -
-
name - 此字段的值保存记录的名称。
-
namespace - 此字段的值保存对象存储的名称空间的名称。
-
type - 此属性的值保存模式中文档(记录)的类型或字段的数据类型。
-
fields - 此字段保存一个 JSON 数组,其中包含模式中所有字段的列表,每个字段都有名称和类型属性。
Example
下面给出一个记录的示例。
{
" type " : "record",
" namespace " : "Tutorialspoint",
" name " : "Employee",
" fields " : [
{ "name" : " Name" , "type" : "string" },
{ "name" : "age" , "type" : "int" }
]
}
Enum
枚举是集合中项的列表,Avro 枚举支持以下属性 -
-
name - 此字段的值保存枚举的名称。
-
namespace −此字段的值包含限定枚举名称的字符串。
-
symbols −此字段的值将枚举的符号作为名称数组保存。
Example
以下是枚举的示例。
{
"type" : "enum",
"name" : "Numbers",
"namespace": "data",
"symbols" : [ "ONE", "TWO", "THREE", "FOUR" ]
}
Maps
地图数据类型是键值对的数组,它以键值对组织数据。Avro 地图的键必须是字符串。地图的值保存地图内容的数据类型。
Example
{"type" : "map", "values" : "int"}