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}
廣告

© . All rights reserved.