AVRO - แบบแผน
Avro ซึ่งเป็นยูทิลิตี้การทำให้อนุกรมตามสคีมายอมรับสกีมาเป็นอินพุต แม้ว่าจะมีสคีมาที่หลากหลาย Avro ก็ปฏิบัติตามมาตรฐานของตัวเองในการกำหนดสคีมา แผนผังเหล่านี้อธิบายรายละเอียดต่อไปนี้ -
- ประเภทของไฟล์ (บันทึกโดยค่าเริ่มต้น)
- สถานที่บันทึก
- ชื่อของบันทึก
- เขตข้อมูลในระเบียนที่มีชนิดข้อมูลที่สอดคล้องกัน
ด้วยการใช้สกีมาเหล่านี้คุณสามารถจัดเก็บค่าอนุกรมในรูปแบบไบนารีโดยใช้พื้นที่น้อยลง ค่าเหล่านี้จะถูกจัดเก็บโดยไม่มีข้อมูลเมตา
การสร้าง Avro Schemas
สคีมา Avro ถูกสร้างขึ้นในรูปแบบเอกสาร JavaScript Object Notation (JSON) ซึ่งเป็นรูปแบบการแลกเปลี่ยนข้อมูลแบบข้อความที่มีน้ำหนักเบา มันถูกสร้างขึ้นด้วยวิธีใดวิธีหนึ่งดังต่อไปนี้ -
- สตริง JSON
- ออบเจ็กต์ JSON
- อาร์เรย์ JSON
Example - ตัวอย่างต่อไปนี้แสดงสคีมาซึ่งกำหนดเอกสารภายใต้พื้นที่ชื่อ Tutorialspoint โดยมีชื่อพนักงานมีชื่อฟิลด์และอายุ
{
"type" : "record",
"namespace" : "Tutorialspoint",
"name" : "Employee",
"fields" : [
{ "name" : "Name" , "type" : "string" },
{ "name" : "Age" , "type" : "int" }
]
}
ในตัวอย่างนี้คุณจะสังเกตได้ว่าแต่ละระเบียนมีสี่ฟิลด์ -
type - ฟิลด์นี้อยู่ภายใต้เอกสารเช่นเดียวกับฟิลด์ที่มีชื่อฟิลด์
ในกรณีของเอกสารจะแสดงประเภทของเอกสารโดยทั่วไปเป็นระเบียนเนื่องจากมีหลายเขตข้อมูล
เมื่อเป็นฟิลด์ประเภทจะอธิบายประเภทข้อมูล
namespace - ฟิลด์นี้อธิบายชื่อของเนมสเปซที่ออบเจ็กต์อาศัยอยู่
name - ฟิลด์นี้อยู่ภายใต้เอกสารเช่นเดียวกับฟิลด์ที่มีชื่อฟิลด์
ในกรณีของเอกสารจะอธิบายชื่อสคีมา ชื่อสคีมานี้พร้อมกับเนมสเปซระบุสคีมาภายในร้านค้าโดยไม่ซ้ำกัน (Namespace.schema name). ในตัวอย่างข้างต้นชื่อเต็มของสคีมาจะเป็น Tutorialspoint.Employee
ในกรณีของเขตข้อมูลจะอธิบายถึงชื่อของเขตข้อมูล
ประเภทข้อมูลดั้งเดิมของ Avro
สคีมาของ Avro มีประเภทข้อมูลดั้งเดิมและประเภทข้อมูลที่ซับซ้อน ตารางต่อไปนี้อธิบายถึงไฟล์primitive data types ของ Avro -
ประเภทข้อมูล | คำอธิบาย |
---|---|
โมฆะ | Null เป็นประเภทที่ไม่มีค่า |
int | จำนวนเต็มลงนาม 32 บิต |
ยาว | จำนวนเต็ม 64 บิตที่ลงชื่อ |
ลอย | single precision (32-bit) เลขทศนิยม IEEE 754 |
สองเท่า | ความแม่นยำสองเท่า (64 บิต) เลขทศนิยม IEEE 754 |
ไบต์ | ลำดับของไบต์ที่ไม่ได้ลงชื่อ 8 บิต |
สตริง | ลำดับอักขระ Unicode |
ประเภทข้อมูลที่ซับซ้อนของ Avro
นอกเหนือจากประเภทข้อมูลดั้งเดิมแล้ว Avro ยังมีข้อมูลที่ซับซ้อนหกประเภท ได้แก่ Records, Enums, Arrays, Maps, Unions และ Fixed
บันทึก
ชนิดข้อมูลเรกคอร์ดใน Avro คือชุดของแอตทริบิวต์หลายรายการ รองรับคุณสมบัติดังต่อไปนี้ -
name - ค่าของฟิลด์นี้ถือเป็นชื่อของเรกคอร์ด
namespace - ค่าของฟิลด์นี้ถือชื่อของเนมสเปซที่เก็บออบเจ็กต์
type - ค่าของแอตทริบิวต์นี้มีทั้งประเภทของเอกสาร (บันทึก) หรือประเภทข้อมูลของฟิลด์ในสคีมา
fields - ฟิลด์นี้มีอาร์เรย์ JSON ซึ่งมีรายการของฟิลด์ทั้งหมดในสคีมาโดยแต่ละฟิลด์จะมีชื่อและแอตทริบิวต์ประเภท
Example
ด้านล่างนี้เป็นตัวอย่างของบันทึก
{
" type " : "record",
" namespace " : "Tutorialspoint",
" name " : "Employee",
" fields " : [
{ "name" : " Name" , "type" : "string" },
{ "name" : "age" , "type" : "int" }
]
}
Enum
การแจงนับคือรายการของรายการในคอลเลกชันการแจงนับ Avro สนับสนุนคุณลักษณะต่อไปนี้ -
name - ค่าของฟิลด์นี้ถือเป็นชื่อของการแจงนับ
namespace - ค่าของฟิลด์นี้ประกอบด้วยสตริงที่มีคุณสมบัติตรงตามชื่อของการแจงนับ
symbols - ค่าของฟิลด์นี้ถือสัญลักษณ์ของ enum เป็นอาร์เรย์ของชื่อ
Example
ด้านล่างเป็นตัวอย่างของการแจงนับ
{
"type" : "enum",
"name" : "Numbers",
"namespace": "data",
"symbols" : [ "ONE", "TWO", "THREE", "FOUR" ]
}
อาร์เรย์
ชนิดข้อมูลนี้กำหนดฟิลด์อาร์เรย์ที่มีรายการแอตทริบิวต์เดียว แอ็ตทริบิวต์ items นี้ระบุชนิดของไอเท็มในอาร์เรย์
Example
{ " type " : " array ", " items " : " int " }
แผนที่
ประเภทข้อมูลแผนที่เป็นอาร์เรย์ของคู่คีย์ - ค่าซึ่งจัดระเบียบข้อมูลเป็นคู่คีย์ - ค่า คีย์สำหรับแผนที่ Avro ต้องเป็นสตริง ค่าของแผนที่ถือประเภทข้อมูลของเนื้อหาของแผนที่
Example
{"type" : "map", "values" : "int"}
สหภาพแรงงาน
ประเภทข้อมูลยูเนี่ยนถูกใช้เมื่อใดก็ตามที่เขตข้อมูลมีประเภทข้อมูลอย่างน้อยหนึ่งประเภท โดยจะแสดงเป็นอาร์เรย์ JSON ตัวอย่างเช่นหากฟิลด์ที่สามารถเป็น int หรือ null ได้ยูเนี่ยนจะแสดงเป็น ["int", "null"]
Example
ด้านล่างเป็นเอกสารตัวอย่างโดยใช้สหภาพแรงงาน -
{
"type" : "record",
"namespace" : "tutorialspoint",
"name" : "empdetails ",
"fields" :
[
{ "name" : "experience", "type": ["int", "null"] }, { "name" : "age", "type": "int" }
]
}
แก้ไขแล้ว
ชนิดข้อมูลนี้ใช้เพื่อประกาศเขตข้อมูลขนาดคงที่ซึ่งสามารถใช้สำหรับจัดเก็บข้อมูลไบนารี มีชื่อฟิลด์และข้อมูลเป็นแอตทริบิวต์ ชื่อถือชื่อของเขตข้อมูลและขนาดถือขนาดของเขตข้อมูล
Example
{ "type" : "fixed" , "name" : "bdata", "size" : 1048576}