AVRO - Schematy
Avro, będąc narzędziem serializacji opartym na schemacie, akceptuje schematy jako dane wejściowe. Pomimo dostępnych różnych schematów, Avro stosuje własne standardy definiowania schematów. Te schematy opisują następujące szczegóły -
- typ pliku (nagrywanie domyślnie)
- lokalizacja zapisu
- nazwa wpisu
- pola w rekordzie wraz z odpowiadającymi im typami danych
Korzystając z tych schematów, można przechowywać zserializowane wartości w formacie binarnym przy użyciu mniejszej ilości miejsca. Te wartości są przechowywane bez żadnych metadanych.
Tworzenie schematów Avro
Schemat Avro jest tworzony w formacie dokumentu JavaScript Object Notation (JSON), który jest lekkim, tekstowym formatem wymiany danych. Jest tworzony na jeden z następujących sposobów -
- Ciąg JSON
- Obiekt JSON
- Tablica JSON
Example - Poniższy przykład przedstawia schemat, który definiuje dokument w przestrzeni nazw Tutorialspoint, z imieniem Pracownik, posiadającym nazwy pól i wiek.
{
"type" : "record",
"namespace" : "Tutorialspoint",
"name" : "Employee",
"fields" : [
{ "name" : "Name" , "type" : "string" },
{ "name" : "Age" , "type" : "int" }
]
}
W tym przykładzie można zauważyć, że dla każdego rekordu są cztery pola -
type - To pole znajduje się pod dokumentem, a także pod polem o nazwie fields.
W przypadku dokumentu pokazuje typ dokumentu, zazwyczaj rekord, ponieważ istnieje wiele pól.
Gdy jest to pole, typ opisuje typ danych.
namespace - To pole zawiera nazwę przestrzeni nazw, w której znajduje się obiekt.
name - To pole znajduje się pod dokumentem, a także pod polem o nazwie fields.
W przypadku dokumentu opisuje nazwę schematu. Ta nazwa schematu wraz z przestrzenią nazw jednoznacznie identyfikuje schemat w sklepie (Namespace.schema name). W powyższym przykładzie pełna nazwa schematu to Tutorialspoint.Employee.
W przypadku pól opisuje nazwę pola.
Prymitywne typy danych Avro
Schemat Avro zawiera prymitywne typy danych, a także złożone typy danych. W poniższej tabeli opisanoprimitive data types z Avro -
Typ danych | Opis |
---|---|
zero | Null to typ bez wartości. |
int | 32-bitowa liczba całkowita ze znakiem. |
długie | 64-bitowa liczba całkowita ze znakiem. |
pływak | pojedyncza precyzja (32-bitowa) liczba zmiennoprzecinkowa IEEE 754. |
podwójnie | podwójna precyzja (64-bitowa) liczba zmiennoprzecinkowa IEEE 754. |
bajtów | sekwencja 8-bitowych bajtów bez znaku. |
strunowy | Sekwencja znaków Unicode. |
Złożone typy danych Avro
Oprócz prymitywnych typów danych Avro zapewnia sześć złożonych typów danych, a mianowicie rekordy, wyliczenia, tablice, mapy, związki i naprawione.
Rekord
Rekordowy typ danych w Avro to zbiór wielu atrybutów. Obsługuje następujące atrybuty -
name - Wartość tego pola zawiera nazwę rekordu.
namespace - wartość tego pola zawiera nazwę przestrzeni nazw, w której przechowywany jest obiekt.
type - Wartość tego atrybutu zawiera typ dokumentu (rekordu) lub typ danych pola w schemacie.
fields - To pole zawiera tablicę JSON, która zawiera listę wszystkich pól w schemacie, z których każde ma nazwę i atrybuty typu.
Example
Poniżej podano przykład rekordu.
{
" type " : "record",
" namespace " : "Tutorialspoint",
" name " : "Employee",
" fields " : [
{ "name" : " Name" , "type" : "string" },
{ "name" : "age" , "type" : "int" }
]
}
Enum
Wyliczenie to lista elementów w kolekcji, wyliczenie Avro obsługuje następujące atrybuty -
name - wartość tego pola zawiera nazwę wyliczenia.
namespace - wartość tego pola zawiera ciąg, który kwalifikuje nazwę wyliczenia.
symbols - wartość tego pola zawiera symbole wyliczenia jako tablicę nazw.
Example
Poniżej podano przykład wyliczenia.
{
"type" : "enum",
"name" : "Numbers",
"namespace": "data",
"symbols" : [ "ONE", "TWO", "THREE", "FOUR" ]
}
Tablice
Ten typ danych definiuje pole tablicy zawierające pojedyncze elementy atrybutu. Ten atrybut pozycji określa typ elementów w tablicy.
Example
{ " type " : " array ", " items " : " int " }
Mapy
Typ danych mapy to tablica par klucz-wartość, organizuje dane jako pary klucz-wartość. Klucz do mapy Avro musi być ciągiem. Wartości mapy zawierają typ danych zawartości mapy.
Example
{"type" : "map", "values" : "int"}
Związki
Typ danych unii jest używany, gdy pole ma jeden lub więcej typów danych. Są reprezentowane jako tablice JSON. Na przykład, jeśli pole może mieć wartość typu int lub null, wówczas unia jest reprezentowana jako ["int", "null"].
Example
Poniżej podano przykładowy dokument wykorzystujący związki -
{
"type" : "record",
"namespace" : "tutorialspoint",
"name" : "empdetails ",
"fields" :
[
{ "name" : "experience", "type": ["int", "null"] }, { "name" : "age", "type": "int" }
]
}
Naprawiony
Ten typ danych służy do deklarowania pola o stałym rozmiarze, którego można używać do przechowywania danych binarnych. Ma nazwę pola i dane jako atrybuty. Nazwa zawiera nazwę pola, a rozmiar - rozmiar pola.
Example
{ "type" : "fixed" , "name" : "bdata", "size" : 1048576}