Link Search Menu Expand Document

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

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

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

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

  • Данные представлены в виде сообщений топика Kafka.
  • Каждое сообщение состоит из ключа и тела. Требования к ключу сообщения не предъявляются.
  • Тело сообщения представляет собой файл Avro (Object Container File), который состоит из заголовка и блоков данных.
  • Заголовок файла содержит схему данных Avro.
  • Схема данных содержит следующие элементы: имя, тип “record” и перечень полей. Для каждого поля указано имя, а также тип данных из числа перечисленных в разделе Загружаемые типы данных (см. пример ниже). Последним полем схемы указано служебное поле 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
  }
]