Avro, al ser una utilidad de serialización basada en esquemas, acepta esquemas como entrada. Si bien hay varios esquemas disponibles, Avro sigue sus propios estándares de definición de esquemas. Estos diagramas describen los siguientes detalles:
Con estos esquemas, puede almacenar valores serializados en binario en menos espacio. Estos valores se almacenan sin metadatos.
Un esquema Avro se genera 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:
Ejemplo – El siguiente ejemplo muestra un esquema que define un documento en el espacio de nombres AreaTutorial llamado Empleado, con el nombre del campo y la edad.
{ "type" : "record", "namespace" : "AreaTutorial", "name" : "Employee", "fields" : [ { "name" : "Name", "type" : "string" }, { "name" : "Age", "type" : "int" } ] }
En este ejemplo, puede observar que hay cuatro campos para cada registro:
un tipo – Este campo está debajo del documento y debajo del campo llamado campos.
En el caso de un documento, muestra el tipo de documento, generalmente una entrada porque hay varios campos.
Cuando se trata de un campo, el tipo describe el tipo de datos.
espacio de nombres – Este campo describe el nombre del espacio de nombres en el que reside el objeto.
nombre – Este campo está ubicado debajo del documento y debajo del campo llamado campos.
En el caso de un documento, describe el nombre del esquema. Este nombre de esquema, junto con el espacio de nombres, identifica de forma única el esquema en el repositorio (Namepace.schema name). En el ejemplo anterior, el nombre de esquema completo serÃa AreaTutorial.Employee.
En el caso de los campos, describe el nombre del campo.
El esquema Avro tiene tipos de datos primitivos y tipos de datos complejos. La siguiente tabla describe tipos de datos primitivos Avro –
Tipo de datos | Descripción |
---|---|
cero | Null es un tipo que no importa. |
En t | Un entero de 32 bits con signo. |
a lo largo de | Entero de 64 bits con signo. |
nadar | Número de coma flotante de 32 bits de precisión simple IEEE 754. |
doble | Número de coma flotante IEEE 754 de doble precisión (64 bits). |
bytes | una secuencia de bytes de 8 bits sin firmar. |
un hilo | Una secuencia de caracteres Unicode. |
Junto con los tipos de datos primitivos, Avro proporciona seis tipos de datos complejos, a saber, registros, enumeraciones, matrices, mapas, uniones y fijos.
Un tipo de datos de registro en Avro es una colección de varios atributos. Admite los siguientes atributos:
nombre – El valor de este campo contiene el nombre de la entrada.
espacio de nombres – El valor de este campo contiene el nombre del espacio de nombres en el que se almacena el objeto.
un tipo – El valor de este atributo contiene el tipo de documento (registro) o el tipo de datos del campo en el esquema.
campos – Este campo contiene una matriz JSON que contiene una lista de todos los campos del esquema, cada uno con un nombre y atributos de tipo.
Ejemplo
A continuación se muestra un ejemplo de una grabación.
{ " type " : "record", " namespace " : "AreaTutorial", " name " : "Employee", " fields " : [ { "name" : " Name", "type" : "string" }, { "name" : "age", "type" : "int" } ] }
Una enumeración es una lista de elementos de una colección, la enumeración Avro admite los siguientes atributos:
nombre – El valor de este campo contiene el nombre de la enumeración.
espacio de nombres – El valor de este campo contiene una cadena que especifica el nombre de la enumeración.
simbolos – El valor de este campo contiene los caracteres de enumeración como una matriz de nombres.
Ejemplo
A continuación se muestra un ejemplo de enumeración.
{ "type" : "enum", "name" : "Numbers", "namespace": "data", "symbols" : [ "ONE", "TWO", "THREE", "FOUR" ] }
Este tipo de datos define un campo de matriz que tiene un elemento de atributo. Este atributo de elementos especifica el tipo de elementos de la matriz.
Ejemplo
{ " type " : " array ", " items " : " int " }
El tipo de datos del mapa es una matriz de pares clave-valor, organiza los datos como pares clave-valor. La clave de la tarjeta Avro debe ser una cuerda. Los valores del mapa contienen el tipo de datos del contenido del mapa.
Ejemplo
{"type" : "map", "values" : "int"}
El tipo de datos de unión se utiliza siempre que un campo tiene uno o más tipos de datos. Se representan como matrices JSON. Por ejemplo, si el campo puede ser entero o nulo, la unión se representarÃa como [«int», «null»]…
Ejemplo
A continuación se muestra un documento de muestra que utiliza uniones:
{ "type" : "record", "namespace" : "AreaTutorial", "name" : "empdetails ", "fields" : [ { "name" : "experience", "type": ["int", "null"] }, { "name" : "age", "type": "int" } ] }
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 contiene el tamaño del campo.
Ejemplo
{ "type" : "fixed", "name" : "bdata", "size" : 1048576}
🚫