AVRO - Schemi

Avro, essendo un'utilità di serializzazione basata su schema, accetta schemi come input. Nonostante siano disponibili vari schemi, Avro segue i propri standard di definizione degli schemi. Questi schemi descrivono i seguenti dettagli:

  • tipo di file (record per impostazione predefinita)
  • luogo di registrazione
  • nome del record
  • campi del record con i corrispondenti tipi di dati

Utilizzando questi schemi, è possibile memorizzare i valori serializzati in formato binario utilizzando meno spazio. Questi valori vengono archiviati senza metadati.

Creazione di schemi Avro

Lo schema Avro viene creato nel formato di documento JavaScript Object Notation (JSON), che è un formato di scambio di dati basato su testo leggero. Viene creato in uno dei seguenti modi:

  • Una stringa JSON
  • Un oggetto JSON
  • Un array JSON

Example - L'esempio seguente mostra uno schema, che definisce un documento, sotto lo spazio dei nomi Tutorialspoint, con nome Employee, con campi name ed age.

{
   "type" : "record",
   "namespace" : "Tutorialspoint",
   "name" : "Employee",
   "fields" : [
      { "name" : "Name" , "type" : "string" },
      { "name" : "Age" , "type" : "int" }
   ]
}

In questo esempio, puoi osservare che ci sono quattro campi per ogni record:

  • type - Questo campo si trova sotto il documento e sotto il campo denominato campi.

    • In caso di documento, mostra il tipo di documento, generalmente un record perché ci sono più campi.

    • Quando è campo, il tipo descrive il tipo di dati.

  • namespace - Questo campo descrive il nome dello spazio dei nomi in cui risiede l'oggetto.

  • name - Questo campo si trova sotto il documento e sotto il campo denominato campi.

    • In caso di documento, descrive il nome dello schema. Questo nome dello schema insieme allo spazio dei nomi identifica in modo univoco lo schema all'interno del negozio (Namespace.schema name). Nell'esempio precedente, il nome completo dello schema sarà Tutorialspoint.Employee.

    • In caso di campi, descrive il nome del campo.

Tipi di dati primitivi di Avro

Lo schema Avro ha tipi di dati primitivi e tipi di dati complessi. La tabella seguente descrive ilprimitive data types di Avro -

Tipo di dati Descrizione
nullo Null è un tipo senza valore.
int Intero con segno a 32 bit.
lungo Intero con segno a 64 bit.
galleggiante numero a virgola mobile IEEE 754 a precisione singola (32 bit).
Doppio numero a virgola mobile IEEE 754 a doppia precisione (64 bit).
byte sequenza di byte senza segno a 8 bit.
corda Sequenza di caratteri Unicode.

Tipi di dati complessi di Avro

Insieme ai tipi di dati primitivi, Avro fornisce sei tipi di dati complessi: Record, Enums, Arrays, Maps, Unions e Fixed.

Disco

Un tipo di dati record in Avro è una raccolta di più attributi. Supporta i seguenti attributi:

  • name - Il valore di questo campo contiene il nome del record.

  • namespace - Il valore di questo campo contiene il nome dello spazio dei nomi in cui è archiviato l'oggetto.

  • type - Il valore di questo attributo contiene il tipo di documento (record) o il tipo di dati del campo nello schema.

  • fields - Questo campo contiene un array JSON, che contiene l'elenco di tutti i campi nello schema, ciascuno con il nome e gli attributi del tipo.

Example

Di seguito è riportato l'esempio di un record.

{
" type " : "record",
" namespace " : "Tutorialspoint",
" name " : "Employee",
" fields " : [
 { "name" : " Name" , "type" : "string" },
 { "name" : "age" , "type" : "int" }
 ]
}

Enum

Un'enumerazione è un elenco di elementi in una raccolta, l'enumerazione Avro supporta i seguenti attributi:

  • name - Il valore di questo campo contiene il nome dell'enumerazione.

  • namespace - Il valore di questo campo contiene la stringa che qualifica il nome dell'Enumerazione.

  • symbols - Il valore di questo campo contiene i simboli dell'enumerazione come un array di nomi.

Example

Di seguito è riportato l'esempio di un'enumerazione.

{
   "type" : "enum",
   "name" : "Numbers", 
   "namespace": "data", 
   "symbols" : [ "ONE", "TWO", "THREE", "FOUR" ]
}

Array

Questo tipo di dati definisce un campo array con un singolo elemento attributo. Questo attributo items specifica il tipo di elementi nell'array.

Example

{ " type " : " array ", " items " : " int " }

Mappe

Il tipo di dati della mappa è un array di coppie chiave-valore, organizza i dati come coppie chiave-valore. La chiave per una mappa Avro deve essere una stringa. I valori di una mappa contengono il tipo di dati del contenuto della mappa.

Example

{"type" : "map", "values" : "int"}

Sindacati

Un tipo di dati unione viene utilizzato ogni volta che il campo ha uno o più tipi di dati. Sono rappresentati come array JSON. Ad esempio, se un campo può essere int o null, l'unione viene rappresentata come ["int", "null"].

Example

Di seguito è riportato un documento di esempio che utilizza i sindacati:

{ 
   "type" : "record", 
   "namespace" : "tutorialspoint", 
   "name" : "empdetails ", 
   "fields" : 
   [ 
      { "name" : "experience", "type": ["int", "null"] }, { "name" : "age", "type": "int" } 
   ] 
}

Fisso

Questo tipo di dati viene utilizzato per dichiarare un campo di dimensioni fisse che può essere utilizzato per memorizzare dati binari. Ha il nome del campo e i dati come attributi. Il nome contiene il nome del campo e la dimensione contiene la dimensione del campo.

Example

{ "type" : "fixed" , "name" : "bdata", "size" : 1048576}