AVRO - Schémas

Avro, étant un utilitaire de sérialisation basé sur des schémas, accepte les schémas en entrée. En dépit de divers schémas disponibles, Avro suit ses propres normes de définition des schémas. Ces schémas décrivent les détails suivants -

  • type de fichier (enregistrement par défaut)
  • lieu d'enregistrement
  • nom du dossier
  • champs de l'enregistrement avec leurs types de données correspondants

À l'aide de ces schémas, vous pouvez stocker des valeurs sérialisées au format binaire en utilisant moins d'espace. Ces valeurs sont stockées sans aucune métadonnée.

Création de schémas Avro

Le schéma Avro est créé au format de document JavaScript Object Notation (JSON), qui est un format léger d'échange de données basé sur du texte. Il est créé de l'une des manières suivantes -

  • Une chaîne JSON
  • Un objet JSON
  • Un tableau JSON

Example - L'exemple suivant montre un schéma, qui définit un document, sous l'espace de nom Tutorialspoint, avec le nom Employee, avec les champs name et age.

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

Dans cet exemple, vous pouvez observer qu'il y a quatre champs pour chaque enregistrement -

  • type - Ce champ se trouve sous le document ainsi que sous le champ nommé champs.

    • Dans le cas d'un document, il montre le type du document, généralement un enregistrement car il y a plusieurs champs.

    • Lorsqu'il s'agit d'un champ, le type décrit le type de données.

  • namespace - Ce champ décrit le nom de l'espace de noms dans lequel réside l'objet.

  • name - Ce champ se trouve sous le document ainsi que sous le champ nommé champs.

    • Dans le cas d'un document, il décrit le nom du schéma. Ce nom de schéma avec l'espace de noms identifie de manière unique le schéma dans le magasin (Namespace.schema name). Dans l'exemple ci-dessus, le nom complet du schéma sera Tutorialspoint.Employee.

    • Dans le cas des champs, il décrit le nom du champ.

Types de données primitifs d'Avro

Le schéma Avro a des types de données primitifs ainsi que des types de données complexes. Le tableau suivant décrit lesprimitive data types d'Avro -

Type de données La description
nul Null est un type sans valeur.
int Entier signé 32 bits.
longue Entier signé 64 bits.
flotte nombre à virgule flottante IEEE 754 simple précision (32 bits).
double nombre à virgule flottante IEEE 754 double précision (64 bits).
octets séquence d'octets non signés de 8 bits.
chaîne Séquence de caractères Unicode.

Types de données complexes d'Avro

Outre les types de données primitifs, Avro fournit six types de données complexes, à savoir les enregistrements, les énumérations, les tableaux, les cartes, les unions et les fixes.

Record

Un type de données d'enregistrement dans Avro est une collection de plusieurs attributs. Il prend en charge les attributs suivants -

  • name - La valeur de ce champ contient le nom de l'enregistrement.

  • namespace - La valeur de ce champ contient le nom de l'espace de noms dans lequel l'objet est stocké.

  • type - La valeur de cet attribut contient soit le type du document (enregistrement), soit le type de données du champ dans le schéma.

  • fields - Ce champ contient un tableau JSON, qui contient la liste de tous les champs du schéma, chacun ayant des attributs de nom et de type.

Example

Ci-dessous est l'exemple d'un enregistrement.

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

Enum

Une énumération est une liste d'éléments dans une collection, l'énumération Avro prend en charge les attributs suivants -

  • name - La valeur de ce champ contient le nom de l'énumération.

  • namespace - La valeur de ce champ contient la chaîne qui qualifie le nom de l'énumération.

  • symbols - La valeur de ce champ contient les symboles de l'énumération sous forme de tableau de noms.

Example

Ci-dessous, un exemple d'énumération.

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

Tableaux

Ce type de données définit un champ de tableau ayant un seul élément d'attribut. Cet attribut d'éléments spécifie le type d'éléments dans le tableau.

Example

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

Plans

Le type de données de carte est un tableau de paires clé-valeur, il organise les données sous forme de paires clé-valeur. La clé d'une carte Avro doit être une chaîne. Les valeurs d'une carte contiennent le type de données du contenu de la carte.

Example

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

Les syndicats

Un type de données union est utilisé chaque fois que le champ a un ou plusieurs types de données. Ils sont représentés sous forme de tableaux JSON. Par exemple, si un champ peut être un entier ou nul, alors l'union est représentée par ["int", "null"].

Example

Vous trouverez ci-dessous un exemple de document utilisant des syndicats -

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

Fixé

Ce type de données est utilisé pour déclarer un champ de taille fixe qui peut être utilisé pour stocker des données binaires. Il a un nom de champ et des données comme attributs. Name contient le nom du champ et la taille contient la taille du champ.

Example

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