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}