Avro-schemas

提供:Dev Guides
移動先:案内検索

AVRO-スキーマ

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

  • ファイルのタイプ(デフォルトで記録)
  • 記録の場所
  • レコードの名前
  • 対応するデータ型を持つレコードのフィールド

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

Avroスキーマの作成

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

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

-次の例は、名前空間finddevguidesで、名前Employeeの名前と年齢のフィールドを持つドキュメントを定義するスキーマを示しています。

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

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

  • type -このフィールドはドキュメントの下にあり、fieldsという名前のフィールドの下にもあります。
  • ドキュメントの場合、複数のフィールドがあるため、ドキュメントのタイプ、通常はレコードを示します。
  • フィールドの場合、タイプはデータタイプを表します。
  • namespace -このフィールドは、オブジェクトが存在する名前空間の名前を記述します。
  • name -このフィールドは、fieldsという名前のフィールドの下だけでなく、ドキュメントの下にもあります。
  • ドキュメントの場合、スキーマ名を記述します。 このスキーマ名と名前空間は、ストア内のスキーマを一意に識別します( Namespace.schema name )。 上記の例では、スキーマの完全な名前はfinddevguides.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は6つの複雑なデータ型、つまりレコード、列挙、配列、マップ、ユニオン、固定を提供します。

記録

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

  • name -このフィールドの値は、レコードの名前を保持します。
  • namespace -このフィールドの値は、名前空間の名前を保持します オブジェクトが保存されます。
  • type -この属性の値は、ドキュメント(レコード)のタイプまたはスキーマ内のフィールドのデータタイプを保持します。
  • fields -このフィールドはJSON配列を保持します。JSON配列には、スキーマ内のすべてのフィールドのリストがあり、各フィールドには名前とタイプの属性があります。

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

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

Enum

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

  • name -このフィールドの値は、列挙の名前を保持します。
  • namespace -このフィールドの値には、列挙の名前を修飾する文字列が含まれています。
  • symbols -このフィールドの値は、列挙型のシンボルを名前の配列として保持します。

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

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

配列

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

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

Maps

マップデータタイプはキーと値のペアの配列であり、データをキーと値のペアとして整理します。 Avroマップのキーは文字列でなければなりません。 マップの値は、マップのコンテンツのデータ型を保持します。

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

組合

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

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

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

一定

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

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