Link Search Menu Expand Document

Формат загрузки данных

Содержание раздела
  1. Структура сообщений
  2. Формат данных
  3. Примеры
    1. Пример загружаемой схемы данных Avro
    2. Пример загружаемых записей Avro

Структура сообщений

Данные загружаются в систему в виде сообщений топиков Kafka. Каждое сообщение имеет структуру, показанную на рисунке ниже.

Структура загружаемых сообщений

Формат данных

Для успешной загрузки данные должны соответствовать следующим условиям:

  • Данные представлены в виде сообщений топика Kafka.
  • Каждое сообщение состоит из ключа и тела. Требования к ключу сообщения не предъявляются.
  • Тело сообщения представляет собой файл Avro (Object Container File), который состоит из заголовка и блоков данных.
  • Заголовок файла содержит схему данных Avro.
  • Схема данных содержит следующие элементы: имя, тип “record” и перечень полей. Для каждого поля указано имя, а также тип данных Avro из перечисленных в разделе Загружаемые типы данных (см. пример ниже). Последним полем схемы указано служебное поле sys_op с типом данных int.
  • Каждый блок данных содержит запись, представленную в бинарной кодировке. Запись соответствует схеме данных из заголовка файла Avro.
  • Каждая запись содержит перечень полей и их значений. Имена и порядок перечисления полей, а также типы данных их значений соответствуют схеме данных (см. пример ниже). Последним полем каждой записи указано служебное поле sys_op со значением 0 (если запись добавляется или обновляется) или 1 (если запись удаляется).
  • Состав и порядок полей совпадают во всех следующих объектах:
    • в схеме данных заголовка файла Avro,
    • в наборе загружаемых записей,
    • во внешней таблице загрузки (поле sys_op может отсутствовать, так как при создании внешней таблицы его можно не указывать),
    • в логической таблице, в которую загружаются данные (поле sys_op должно отсутствовать, так как оно относится к числу зарезервированных служебных полей).

В схеме данных можно использовать логические типы Avro, а также элементы unions (см. пример ниже). Типы данных Avro, доступные к загрузке в систему, описаны в разделе Загружаемые типы данных.

Подробнее о формате Avro см. в официальной документации на сайте https://avro.apache.org.

Примеры

Пример загружаемой схемы данных Avro

Пример ниже содержит схему данных Avro, используемую для загрузки данных о продажах в логическую таблицу sales. Для поля transaction_date указан логический тип Avro, для поля description — элемент union. Для наглядности примера бинарные данные представлены в JSON-формате.

{
  "name": "sales",
  "type": "record",
  "fields": [
    {
      "name": "identification_number",
      "type": "long"
    },
    {
      "name": "transaction_date",
      "type": "long",
      "logicalType": "timestamp-micros"
    },
    {
      "name": "product_code",
      "type": "string"
    },
    {
      "name": "product_units",
      "type": "long"
    },
    {
      "name": "store_id",
      "type": "long"
    },
    {
      "name": "description",
      "type": [
        "null",
        "string"
      ]
    },
    {
      "name": "sys_op",
      "type": "int"
    }
  ]
}

Пример загружаемых записей Avro

Пример ниже содержит набор записей о продажах, загружаемых в логическую таблицу sales. Для наглядности примера бинарные данные представлены в JSON-формате.

[
  {
    "identification_number": 1000111,
    "transaction_date": 1614269474000000,
    "product_code": "ABC102101",
    "product_units": 2,
    "store_id": 1000012345,
    "description": "Покупка по акции 1+1",
    "sys_op": 0
  },
  {
    "identification_number": 1000112,
    "transaction_date": 1614334214000000,
    "product_code": "ABC102001",
    "product_units": 1,
    "store_id": 1000000123,
    "description": "Покупка без акций",
    "sys_op": 0
  },
  {
    "identification_number": 1000020,
    "transaction_date": 1614636614000000,
    "product_code": "ABC102010",
    "product_units": 4,
    "store_id": 1000000123,
    "description": "Покупка по акции 1+1",
    "sys_op": 1
  }
]