Учебники

AVRO — Схемы

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

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

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

Создание Авро Схем

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

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

Пример. В следующем примере показана схема, определяющая документ в пространстве имен Tutorialspoint с именем Employee, имеющим поля name и age.

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

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

  • тип — это поле относится как к документу, так и к полю с именем fields.

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

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

тип — это поле относится как к документу, так и к полю с именем fields.

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

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

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

  • name — это поле относится как к документу, так и к полю с именем fields.

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

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

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

name — это поле относится как к документу, так и к полю с именем fields.

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

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

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

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

Тип данных Описание
ноль Нуль — это тип, не имеющий значения.
ИНТ 32-разрядное целое число со знаком.
долго 64-разрядное целое число со знаком.
поплавок 32-разрядное число IEEE 754 одинарной точности с плавающей запятой.
двойной 64-разрядное число IEEE 754 с двойной точностью.
байтов последовательность 8-битных байтов без знака.
строка Последовательность символов Юникода.

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

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

запись

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

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

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

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

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

name — значение этого поля содержит название записи.

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

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

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

пример

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

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

Enum

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

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

  • namespace — значение этого поля содержит строку, которая квалифицирует имя перечисления.

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

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

namespace — значение этого поля содержит строку, которая квалифицирует имя перечисления.

символы — значение этого поля содержит символы перечисления в виде массива имен.

пример

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

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

Массивы

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

пример

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

Карты

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

пример

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

Союзы

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

пример

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

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

Исправлена

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

пример