- AVRO 基礎
- AVRO - 首頁
- AVRO - 概述
- AVRO - 序列化
- AVRO - 環境設定
- AVRO 模式 & API
- AVRO - 模式
- AVRO - 參考 API
- 透過生成類使用 AVRO
- 透過生成類進行序列化
- 透過生成類進行反序列化
- 使用解析器庫的 AVRO
- 使用解析器進行序列化
- 使用解析器進行反序列化
- AVRO 有用資源
- AVRO - 快速指南
- AVRO - 有用資源
- AVRO - 討論
AVRO - 模式
Avro 作為一種基於模式的序列化工具,接受模式作為輸入。儘管有各種可用的模式,但 Avro 遵循其自身的模式定義標準。這些模式描述以下細節:
- 檔案型別(預設為記錄)
- 記錄的位置
- 記錄的名稱
- 記錄中的欄位及其對應的資料型別
使用這些模式,您可以使用更少的空間以二進位制格式儲存序列化值。這些值儲存時不包含任何元資料。
建立 Avro 模式
Avro 模式以 JavaScript 物件表示法 (JSON) 文件格式建立,這是一種輕量級的基於文字的資料交換格式。它可以透過以下方式之一建立:
- JSON 字串
- JSON 物件
- JSON 陣列
示例 - 下面的示例顯示了一個模式,該模式在名稱空間 Tutorialspoint 下定義了一個名為 Employee 的文件,其中包含 name 和 age 欄位。
{
"type" : "record",
"namespace" : "Tutorialspoint",
"name" : "Employee",
"fields" : [
{ "name" : "Name" , "type" : "string" },
{ "name" : "Age" , "type" : "int" }
]
}
在這個示例中,您可以觀察到每個記錄有四個欄位:
type - 此欄位位於文件下以及名為 fields 的欄位下。
對於文件,它顯示文件的型別,通常是記錄,因為有多個欄位。
當它是欄位時,type 描述資料型別。
namespace - 此欄位描述物件所在的名稱空間的名稱。
name - 此欄位位於文件下以及名為 fields 的欄位下。
對於文件,它描述模式名稱。此模式名稱與名稱空間一起唯一標識儲存中的模式(Namespace.schema name)。在上面的示例中,模式的全名將是 Tutorialspoint.Employee。
對於欄位,它描述欄位的名稱。
Avro 的基本資料型別
Avro 模式具有基本資料型別和複雜資料型別。下表描述了 Avro 的基本資料型別:
| 資料型別 | 描述 |
|---|---|
| null | Null 是一種沒有值的型別。 |
| int | 32 位有符號整數。 |
| long | 64 位有符號整數。 |
| float | 單精度 (32 位) IEEE 754 浮點數。 |
| double | 雙精度 (64 位) IEEE 754 浮點數。 |
| bytes | 8 位無符號位元組序列。 |
| string | Unicode 字元序列。 |
Avro 的複雜資料型別
除了基本資料型別之外,Avro 還提供了六種複雜資料型別,即記錄、列舉、陣列、對映、聯合和固定。
記錄
Avro 中的記錄資料型別是多個屬性的集合。它支援以下屬性:
name - 此欄位的值儲存記錄的名稱。
namespace - 此欄位的值儲存物件儲存的名稱空間的名稱。
type - 此屬性的值儲存文件的型別(記錄)或模式中欄位的資料型別。
fields - 此欄位儲存一個 JSON 陣列,其中包含模式中所有欄位的列表,每個欄位都具有 name 和 type 屬性。
示例
下面是一個記錄的示例。
{
" type " : "record",
" namespace " : "Tutorialspoint",
" name " : "Employee",
" fields " : [
{ "name" : " Name" , "type" : "string" },
{ "name" : "age" , "type" : "int" }
]
}
列舉
列舉是集合中專案的列表,Avro 列舉支援以下屬性:
name - 此欄位的值儲存列舉的名稱。
namespace - 此欄位的值包含限定列舉名稱的字串。
symbols - 此欄位的值儲存列舉的符號,作為名稱陣列。
示例
下面是一個列舉的示例。
{
"type" : "enum",
"name" : "Numbers",
"namespace": "data",
"symbols" : [ "ONE", "TWO", "THREE", "FOUR" ]
}
陣列
此資料型別定義一個數組欄位,該欄位具有單個屬性 items。此 items 屬性指定陣列中專案的型別。
示例
{ " type " : " array ", " items " : " int " }
對映
對映資料型別是鍵值對的陣列,它將資料組織為鍵值對。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" }
]
}
固定
此資料型別用於宣告一個固定大小的欄位,該欄位可用於儲存二進位制資料。它具有欄位名稱和資料作為屬性。Name 儲存欄位的名稱,size 儲存欄位的大小。
示例
{ "type" : "fixed" , "name" : "bdata", "size" : 1048576}