Avro schema Specification

3052 ワード

Introductionこのドキュメントは、Apache Avroを定義しています.これは権威のあるガイドラインであり、Avroの実装はこのドキュメントに従う必要があります.
Schema Declaration schemaはJsonの形で表現され、以下のいくつかの形式が存在する.
1)Json文字列、名前は定義タイプです.
2)Jsonオブジェクト、形式:{"type":"typeName"...attributes...}typenameは元のタイプまたは派生タイプです.ドキュメントで定義されているattributeはメタデータとして使用できますが、シーケンス化されたデータのフォーマットには影響しません.
3)Json配列は,埋め込み型の連合体を表す
Primitive typesベースデータ型は次のとおりです.
1)null:指なし
2)boolean:バイナリ値
3)int:32ビット符号付き整数
4)long:64ビット符号付き整数
5)float:単精度(32ビット)浮動小数点数
6)double:二重精度(64ビット)浮動小数点数
7)bytes:8ビットbitバイトシーケンス
8)string:unicode文字列
基本タイプには指定された属性はありません.{「type」:「string」}
Complex Types
AVroは、records、enums、arrays、maps、unions、fixedの6つの複雑なタイプをサポートします.
record records:nameを「record」とし、3つのプロパティをサポートします.
1)name:json文字列、recordの名前を指定
2)namespace:nameのフルネーム.
3)doc:このschemaの説明
4)aliases:jsonの文字列配列,nameの代替値.
5)fields:json配列、filedリスト、各filedはjsonオブジェクトであり、その属性は以下の通りである.
1)name:json文字列
2)doc:fieldの説明
3)type:jsonオブジェクトの定義schema.
4)default:このfiledのデフォルト値
5)order:このrecordのfiledの圧縮ソート順を指定します.有効な値はascending descending ignoreです
{
  "type": "record", 
  "name": "LongList",
  "aliases": ["LinkedLongs"],                      // old name for this
  "fields" : [
    {"name": "value", "type": "long"},             // each element has a long
    {"name": "next", "type": ["LongList", "null"]} // optional next element
  ]
}

Enums列挙使用タイプ名は「enum」で、属性をサポートします.
1)name:json文字列
2)namespace:フルネーム
3)aliases:json文字列配列、別名
4)doc:このschemaの説明
5)symbols:json配列、symbolsリスト
{ "type": "enum",
  "name": "Suit",
  "symbols" : ["SPADES", "HEARTS", "DIAMONDS", "CLUBS"]
}

Arraysはtypeの名前をarrayとし、単一のプロパティをサポートします.items:配列要素のschema.
{"type": "array", "items": "string"}

Mapsはtypeの名前をmapとし、属性をサポートします.values:mapのvalueのschema.mapのkeysは文字列に設定されています.
{"type": "map", "values": "long"}
Unions Unionはjson配列代表を使用して、[string]、[null]、schemaがnullかnullかを宣言します.同じタイプの場合、unionには複数のschemaは含まれません.
Fixedは2つのプロパティをサポートします.
1)name、このfiledの名前
2)namespace:フルネーム
3)aliases:別名、json文字列配列
4)size:integer、各値のバイト数
{"type": "fixed", "size": 16, "name": "md5"} 

Data Serialization avro dataシーケンス化はschemaを伴う.Avroデータを格納するファイルには、このデータのschemaも含まれます.AvroのRPCシステムは、リモートデータ受信者がデータを書くときにschemaのバックアップがあることを保証しなければならない.データ読み出し時には、書き込みデータのschemaは通常取得可能であるため、Avroデータ自体にタイプ情報は含まれない.一般に、シーケンス化および逆シーケンス化のプロセスは、schemaを左から右に巡回する深さ優先です.
Encodings
avroは2つの化学的分解符号化方式を提供した:バイナリとJson.ほとんどは、コンパクトで高速なため、バイナリ符号化を使用します.デバッグとwebのアプリケーションに基づいて、Json符号化がより適切になります.
Binary Encoding