AVRO - Esquemas

Avro, al ser una utilidad de serialización basada en esquemas, acepta esquemas como entrada. A pesar de que hay varios esquemas disponibles, Avro sigue sus propios estándares para definir esquemas. Estos esquemas describen los siguientes detalles:

  • tipo de archivo (registro por defecto)
  • ubicación del registro
  • nombre del registro
  • campos en el registro con sus tipos de datos correspondientes

Con estos esquemas, puede almacenar valores serializados en formato binario con menos espacio. Estos valores se almacenan sin metadatos.

Creación de esquemas de Avro

El esquema Avro se crea en formato de documento JavaScript Object Notation (JSON), que es un formato ligero de intercambio de datos basado en texto. Se crea de una de las siguientes formas:

  • Una cadena JSON
  • Un objeto JSON
  • Una matriz JSON

Example - El siguiente ejemplo muestra un esquema, que define un documento, bajo el espacio de nombres Tutorialspoint, con nombre Empleado, que tiene campos nombre y edad.

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

En este ejemplo, puede observar que hay cuatro campos para cada registro:

  • type - Este campo se encuentra debajo del documento, así como debajo del campo llamado campos.

    • En caso de documento, muestra el tipo de documento, generalmente un registro porque hay varios campos.

    • Cuando es un campo, el tipo describe el tipo de datos.

  • namespace - Este campo describe el nombre del espacio de nombres en el que reside el objeto.

  • name - Este campo se encuentra debajo del documento, así como debajo del campo llamado campos.

    • En caso de documento, describe el nombre del esquema. Este nombre de esquema, junto con el espacio de nombres, identifica de forma única el esquema dentro de la tienda (Namespace.schema name). En el ejemplo anterior, el nombre completo del esquema será Tutorialspoint.Employee.

    • En el caso de los campos, describe el nombre del campo.

Tipos de datos primitivos de Avro

El esquema Avro tiene tipos de datos primitivos y tipos de datos complejos. La siguiente tabla describe elprimitive data types de Avro -

Tipo de datos Descripción
nulo Null es un tipo que no tiene valor.
En t Entero de 32 bits con signo.
largo Entero de 64 bits con signo.
flotador número de punto flotante IEEE 754 de precisión simple (32 bits).
doble número de coma flotante IEEE 754 de doble precisión (64 bits).
bytes secuencia de bytes sin firmar de 8 bits.
cuerda Secuencia de caracteres Unicode.

Tipos de datos complejos de Avro

Junto con los tipos de datos primitivos, Avro proporciona seis tipos de datos complejos, a saber, registros, enumeraciones, matrices, mapas, uniones y fijos.

Grabar

Un tipo de datos de registro en Avro es una colección de múltiples atributos. Admite los siguientes atributos:

  • name - El valor de este campo contiene el nombre del registro.

  • namespace - El valor de este campo contiene el nombre del espacio de nombres donde se almacena el objeto.

  • type - El valor de este atributo contiene el tipo de documento (registro) o el tipo de datos del campo en el esquema.

  • fields - Este campo contiene una matriz JSON, que tiene la lista de todos los campos del esquema, cada uno con el nombre y los atributos de tipo.

Example

A continuación se muestra el ejemplo de un registro.

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

Enum

Una enumeración es una lista de elementos en una colección, la enumeración Avro admite los siguientes atributos:

  • name - El valor de este campo contiene el nombre de la enumeración.

  • namespace - El valor de este campo contiene la cadena que califica el nombre de la Enumeración.

  • symbols - El valor de este campo contiene los símbolos de la enumeración como una matriz de nombres.

Example

A continuación se muestra el ejemplo de una enumeración.

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

Matrices

Este tipo de datos define un campo de matriz que tiene elementos de un solo atributo. Este atributo de elementos especifica el tipo de elementos de la matriz.

Example

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

Mapas

El tipo de datos del mapa es una matriz de pares clave-valor, organiza los datos como pares clave-valor. La clave de un mapa de Avro debe ser una cadena. Los valores de un mapa contienen el tipo de datos del contenido del mapa.

Example

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

Sindicatos

Se utiliza un tipo de datos de unión siempre que el campo tiene uno o más tipos de datos. Están representados como matrices JSON. Por ejemplo, si un campo puede ser int o nulo, entonces la unión se representa como ["int", "nulo"].

Example

A continuación se muestra un documento de ejemplo que utiliza uniones:

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

Fijo

Este tipo de datos se utiliza para declarar un campo de tamaño fijo que se puede utilizar para almacenar datos binarios. Tiene nombre de campo y datos como atributos. El nombre contiene el nombre del campo y el tamaño tiene el tamaño del campo.

Example

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