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}