📜  AVRO-模式

📅  最后修改于: 2020-12-02 05:25:26             🧑  作者: Mango


Avro是基于模式的序列化实用程序,接受模式作为输入。尽管有各种可用的架构,但Avro遵循其自己的定义架构标准。这些模式描述了以下细节-

  • 文件类型(默认记录)
  • 记录位置
  • 记录名称
  • 记录中的字段及其相应的数据类型

使用这些架构,您可以使用更少的空间以二进制格式存储序列化的值。这些值存储时没有任何元数据。

创建Avro模式

Avro模式以JavaScript Object Notation(JSON)文档格式创建,这是一种轻量级的基于文本的数据交换格式。它是通过以下方式之一创建的-

  • JSON字符串
  • JSON对象
  • JSON数组

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

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

在此示例中,您可以观察到每个记录有四个字段-

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

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

    • 如果是字段,则类型描述数据类型。

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

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

    • 如果是文档,则描述架构名称。此架构名称与名称空间一起唯一标识存储中的架构( Namespace.schema name )。在上面的示例中,架构的全名将为Tutorialspoint.Employee。

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

Avro的原始数据类型

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

Data type Description
null Null is a type having no value.
int 32-bit signed integer.
long 64-bit signed integer.
float single precision (32-bit) IEEE 754 floating-point number.
double double precision (64-bit) IEEE 754 floating-point number.
bytes sequence of 8-bit unsigned bytes.
string Unicode character sequence.

Avro的复杂数据类型

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

记录

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

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

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

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

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

下面给出的是记录示例。

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

枚举

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

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

  • 名称空间-该字段的值包含限定枚举名称的字符串。

  • 符号-该字段的值将枚举的符号保存为名称数组。

下面给出的是枚举的示例。

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

数组

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

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

固定

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

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