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" } ] }
Исправлена
Этот тип данных используется для объявления поля фиксированного размера, которое можно использовать для хранения двоичных данных. Он имеет имя поля и данные в качестве атрибутов. Имя содержит имя поля, а размер — размер поля.
пример