AVRO - Esquemas

Avro, sendo um utilitário de serialização baseado em esquema, aceita esquemas como entrada. Apesar de vários esquemas estarem disponíveis, Avro segue seus próprios padrões de definição de esquemas. Esses esquemas descrevem os seguintes detalhes -

  • tipo de arquivo (registro por padrão)
  • localização do registro
  • nome do registro
  • campos no registro com seus tipos de dados correspondentes

Usando esses esquemas, você pode armazenar valores serializados em formato binário usando menos espaço. Esses valores são armazenados sem metadados.

Criação de esquemas Avro

O esquema Avro é criado no formato de documento JavaScript Object Notation (JSON), que é um formato leve de intercâmbio de dados baseado em texto. Ele é criado de uma das seguintes maneiras -

  • Uma string JSON
  • Um objeto JSON
  • Uma matriz JSON

Example - O exemplo a seguir mostra um esquema, que define um documento, sob o namespace Tutorialspoint, com o nome Employee, tendo os campos name e age.

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

Neste exemplo, você pode observar que existem quatro campos para cada registro -

  • type - Este campo está incluído no documento, bem como no campo denominado campos.

    • No caso de documento, mostra o tipo do documento, geralmente um registro porque há vários campos.

    • Quando é um campo, o tipo descreve o tipo de dados.

  • namespace - Este campo descreve o nome do namespace no qual o objeto reside.

  • name - Este campo está incluído no documento, bem como no campo denominado campos.

    • No caso de documento, descreve o nome do esquema. Este nome de esquema, juntamente com o namespace, identifica exclusivamente o esquema dentro da loja (Namespace.schema name) No exemplo acima, o nome completo do esquema será Tutorialspoint.Employee.

    • No caso de campos, descreve o nome do campo.

Tipos de dados primitivos de Avro

O esquema Avro possui tipos de dados primitivos, bem como tipos de dados complexos. A tabela a seguir descreve oprimitive data types de Avro -

Tipo de dados Descrição
nulo Nulo é um tipo sem valor.
int Número inteiro assinado de 32 bits.
longo Inteiro assinado de 64 bits.
flutuador Número de ponto flutuante IEEE 754 de precisão única (32 bits).
Duplo Número de ponto flutuante IEEE 754 de precisão dupla (64 bits).
bytes seqüência de bytes não assinados de 8 bits.
corda Sequência de caracteres Unicode.

Tipos de dados complexos do Avro

Junto com os tipos de dados primitivos, Avro fornece seis tipos de dados complexos, a saber Records, Enums, Arrays, Maps, Unions e Fixed.

Registro

Um tipo de dados de registro no Avro é uma coleção de vários atributos. Suporta os seguintes atributos -

  • name - O valor deste campo contém o nome do registro.

  • namespace - O valor deste campo contém o nome do namespace onde o objeto está armazenado.

  • type - O valor deste atributo contém o tipo do documento (registro) ou o tipo de dados do campo no esquema.

  • fields - Este campo contém uma matriz JSON, que contém a lista de todos os campos do esquema, cada um com o nome e os atributos de tipo.

Example

A seguir está o exemplo de um registro.

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

Enum

Uma enumeração é uma lista de itens em uma coleção, a enumeração Avro oferece suporte aos seguintes atributos -

  • name - O valor deste campo contém o nome da enumeração.

  • namespace - O valor deste campo contém a string que qualifica o nome da Enumeração.

  • symbols - O valor deste campo contém os símbolos do enum como uma matriz de nomes.

Example

A seguir está o exemplo de uma enumeração.

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

Arrays

Este tipo de dados define um campo de matriz com itens de um único atributo. Este atributo de itens especifica o tipo de itens na matriz.

Example

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

Mapas

O tipo de dados do mapa é uma matriz de pares de valores-chave e organiza os dados como pares de valores-chave. A chave para um mapa Avro deve ser uma string. Os valores de um mapa contêm o tipo de dados do conteúdo do mapa.

Example

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

Sindicatos

Um tipo de dados de união é usado sempre que o campo tem um ou mais tipos de dados. Eles são representados como matrizes JSON. Por exemplo, se um campo pode ser int ou nulo, a união é representada como ["int", "nulo"].

Example

Abaixo está um exemplo de documento usando sindicatos -

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

Fixo

Este tipo de dados é usado para declarar um campo de tamanho fixo que pode ser usado para armazenar dados binários. Possui nome de campo e dados como atributos. Nome contém o nome do campo e o tamanho contém o tamanho do campo.

Example

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