AVRO-スキーマ

スキーマベースのシリアル化ユーティリティであるAvroは、入力としてスキーマを受け入れます。さまざまなスキーマが利用可能であるにもかかわらず、Avroはスキーマを定義する独自の標準に従います。これらのスキーマは、次の詳細を説明しています-

  • ファイルのタイプ(デフォルトではレコード)
  • 記録の場所
  • レコードの名前
  • レコード内のフィールドとそれに対応するデータ型

これらのスキーマを使用すると、より少ないスペースを使用して、シリアル化された値をバイナリ形式で格納できます。これらの値は、メタデータなしで保存されます。

Avroスキーマの作成

Avroスキーマは、JavaScript Object Notation(JSON)ドキュメント形式で作成されます。これは、軽量のテキストベースのデータ交換形式です。次のいずれかの方法で作成されます-

  • JSON文字列
  • JSONオブジェクト
  • JSON配列

Example −次の例は、名前空間Tutorialspointの下で、名前がEmployeeで、フィールドnameとageを持つドキュメントを定義するスキーマを示しています。

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

この例では、各レコードに4つのフィールドがあることがわかります。

  • type −このフィールドは、fieldsという名前のフィールドの下だけでなく、ドキュメントの下にもあります。

    • ドキュメントの場合、ドキュメントのタイプが表示されます。複数のフィールドがあるため、通常はレコードです。

    • フィールドの場合、タイプはデータタイプを表します。

  • namespace −このフィールドは、オブジェクトが存在する名前空間の名前を記述します。

  • name −このフィールドは、fieldsという名前のフィールドの下だけでなく、ドキュメントの下にもあります。

    • ドキュメントの場合は、スキーマ名を記述します。このスキーマ名と名前空間は、ストア内のスキーマを一意に識別します(Namespace.schema name)。上記の例では、スキーマのフルネームはTutorialspoint.Employeeになります。

    • フィールドの場合は、フィールドの名前を記述します。

Avroのプリミティブデータ型

Avroスキーマには、プリミティブデータ型と複雑なデータ型があります。次の表で、primitive data types アブロの-

データ・タイプ 説明
ヌル Nullは、値を持たない型です。
int 32ビットの符号付き整数。
長いです 64ビットの符号付き整数。
浮く 単精度(32ビット)IEEE754浮動小数点数。
ダブル 倍精度(64ビット)IEEE754浮動小数点数。
バイト 8ビットの符号なしバイトのシーケンス。
ストリング Unicode文字シーケンス。

Avroの複雑なデータ型

プリミティブデータ型に加えて、Avroは、レコード、列挙型、配列、マップ、共用体、および固定の6つの複雑なデータ型を提供します。

記録

Avroのレコードデータ型は、複数の属性のコレクションです。次の属性をサポートします-

  • name −このフィールドの値は、レコードの名前を保持します。

  • namespace −このフィールドの値は、オブジェクトが格納されている名前空間の名前を保持します。

  • type −この属性の値は、ドキュメント(レコード)のタイプまたはスキーマのフィールドのデータ型のいずれかを保持します。

  • fields −このフィールドはJSON配列を保持します。この配列には、スキーマ内のすべてのフィールドのリストがあり、それぞれに名前とタイプ属性があります。

Example

以下に、レコードの例を示します。

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

列挙型

列挙型はコレクション内のアイテムのリストです。Avro列挙型は次の属性をサポートします-

  • name −このフィールドの値は、列挙の名前を保持します。

  • namespace −このフィールドの値には、列挙型の名前を修飾する文字列が含まれます。

  • symbols −このフィールドの値は、列挙型のシンボルを名前の配列として保持します。

Example

以下に列挙の例を示します。

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

配列

このデータ型は、単一の属性項目を持つ配列フィールドを定義します。このitems属性は、配列内のアイテムのタイプを指定します。

Example

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

マップ

マップデータ型はキーと値のペアの配列であり、データをキーと値のペアとして編成します。Avroマップのキーは文字列である必要があります。マップの値は、マップのコンテンツのデータ型を保持します。

Example

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

組合

フィールドに1つ以上のデータ型がある場合は常に、共用体データ型が使用されます。それらはJSON配列として表されます。たとえば、フィールドがintまたはnullの場合、和集合は["int"、 "null"]として表されます。

Example

以下に、共用体を使用したドキュメントの例を示します-

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

修繕

このデータ型は、バイナリデータの格納に使用できる固定サイズのフィールドを宣言するために使用されます。属性としてフィールド名とデータがあります。Nameはフィールドの名前を保持し、sizeはフィールドのサイズを保持します。

Example

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