АВРО - Схемы
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}