Формат загрузки данных
Содержание раздела
Структура сообщений
Данные загружаются в систему в виде сообщений топиков 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": "id",
"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-формате.
[
{
"id": 1000111,
"transaction_date": 1614269474000000,
"product_code": "ABC102101",
"product_units": 2,
"store_id": 1000012345,
"description": "Покупка по акции 1+1",
"sys_op": 0
},
{
"id": 1000112,
"transaction_date": 1614334214000000,
"product_code": "ABC102001",
"product_units": 1,
"store_id": 1000000123,
"description": "Покупка без акций",
"sys_op": 0
},
{
"id": 1000020,
"transaction_date": 1614636614000000,
"product_code": "ABC102010",
"product_units": 4,
"store_id": 1000000123,
"description": "Покупка по акции 1+1",
"sys_op": 1
}
]