АВРО - Схемы

Avro, будучи утилитой сериализации на основе схем, принимает схемы в качестве входных данных. Несмотря на то, что доступны различные схемы, Avro следует своим собственным стандартам определения схем. Эти схемы описывают следующие детали -

  • тип файла (запись по умолчанию)
  • место записи
  • название записи
  • поля в записи с соответствующими типами данных

Используя эти схемы, вы можете хранить сериализованные значения в двоичном формате, занимая меньше места. Эти значения хранятся без метаданных.

Создание схем Avro

Схема Avro создается в формате документа JavaScript Object Notation (JSON), который представляет собой облегченный текстовый формат обмена данными. Он создается одним из следующих способов -

  • Строка JSON
  • Объект JSON
  • Массив JSON

Example - В следующем примере показана схема, которая определяет документ в пространстве имен Tutorialspoint с именем Сотрудник, имеющим имя поля и возраст.

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

В этом примере вы можете заметить, что для каждой записи есть четыре поля:

  • type - Это поле находится как под документом, так и под полем с именем fields.

    • В случае документа он показывает тип документа, обычно запись, потому что имеется несколько полей.

    • Когда это поле, тип описывает тип данных.

  • namespace - Это поле описывает имя пространства имен, в котором находится объект.

  • name - Это поле находится как под документом, так и под полем с именем fields.

    • В случае документа он описывает имя схемы. Это имя схемы вместе с пространством имен однозначно идентифицирует схему в хранилище (Namespace.schema name). В приведенном выше примере полное имя схемы будет Tutorialspoint.Employee.

    • В случае полей он описывает имя поля.

Примитивные типы данных Avro

Схема Avro имеет как примитивные типы данных, так и сложные типы данных. В следующей таблице описаныprimitive data types Авро -

Тип данных Описание
значение NULL Null - это тип, не имеющий значения.
int 32-битное целое число со знаком.
длинный 64-битное целое число со знаком.
плавать 32-битное число с плавающей запятой одинарной точности IEEE 754.
двойной Число с плавающей запятой двойной точности (64-битное) IEEE 754.
байты последовательность 8-битных байтов без знака.
строка Последовательность символов Юникода.

Сложные типы данных Avro

Наряду с примитивными типами данных Avro предоставляет шесть сложных типов данных, а именно записи, перечисления, массивы, карты, объединения и фиксированные.

Запись

Тип данных записи в Avro - это набор нескольких атрибутов. Он поддерживает следующие атрибуты -

  • name - Значение этого поля содержит имя записи.

  • namespace - Значение этого поля содержит имя пространства имен, в котором хранится объект.

  • type - Значение этого атрибута содержит либо тип документа (записи), либо тип данных поля в схеме.

  • fields - Это поле содержит массив JSON, в котором есть список всех полей в схеме, каждое из которых имеет имя и атрибуты типа.

Example

Ниже приведен пример записи.

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

Enum

Перечисление - это список элементов в коллекции, перечисление Avro поддерживает следующие атрибуты:

  • name - Значение этого поля содержит имя перечисления.

  • namespace - Значение этого поля содержит строку, определяющую имя перечисления.

  • symbols - Значение этого поля содержит символы перечисления в виде массива имен.

Example

Ниже приводится пример перечисления.

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

Массивы

Этот тип данных определяет поле массива, имеющее один элемент атрибута. Этот атрибут items определяет тип элементов в массиве.

Example

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

Карты

Тип данных карты - это массив пар ключ-значение, он организует данные как пары ключ-значение. Ключ для карты Avro должен быть строкой. Значения карты содержат тип данных содержимого карты.

Example

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

Союзы

Тип данных union используется всякий раз, когда поле имеет один или несколько типов данных. Они представлены в виде массивов JSON. Например, если поле может быть либо int, либо null, тогда объединение будет представлено как ["int", "null"].

Example

Ниже приведен пример документа с использованием союзов -

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

Исправлена

Этот тип данных используется для объявления поля фиксированного размера, которое может использоваться для хранения двоичных данных. Он имеет имя поля и данные как атрибуты. Имя содержит имя поля, а размер содержит размер поля.

Example

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