.. _etl_mapping: Маппинг данных (Endpoint – generateMapping) ############################################# В данном разделе описывается генерация файла маппинга. Endpoint предназначен для первичной настройки, а также перенастройки сервиса в случае изменения модели данных Витрины. Файл маппинга генерируется источником данных в формате **Kotlin-script**. В файле описана модель данных Витрины данных в виде структуры объектов Kotlin (``table``, ``column``). Объекты ``table`` описывают таблицы, каждый из них содержит имя таблицы и список колонок в том порядке, в котором они созданы в Витрине. Объекты ``column`` описывают колонки, каждый из них содержит имя колонки, тип данных, признак обязательности (nullable), признак первичного ключа. Файл используется сервисом для описания модели данных и валидации входящих данных. Выполняются следующие проверки: - проверяется соответствие состава полей входящей avro-структуры составу полей, описанных в файле маппинга; - проверяется соответствие порядка полей входящей avro-структуры порядку полей, описанных в файле маппинга; - проверяется соответствие типов данных полей входящей avro-структуры типам полей, описанных в файле маппинга. Для полей с установленным признаком обязательности (nullable = false) выполняется проверка на null. При вызове Endpoint’а ``/generateMapping`` сервис генерирует файл на основе информации о модели, полученной из развернутой Витрины данных. Файл складывается сервисом на диск, а также возвращается в ответе на вызов. Пример запроса на генерацию маппинга представлен ниже: .. code-block:: curl -X GET "http://:8088/api/v1/secure/////generateMapping/aef2f195-0001-4aaa-b171-f2746511e889" -H "Authorization: Bearer " Результат Витрина данных вернёт в формате Kotlin-script: .. code-block:: kotlin import ru.supercode.mapping.common.ColumnType.* import ru.supercode.mapping.mapper.dsl.mappingAvro mappingAvro { table("product") { column("id", INTEGER) { nullable = false; primary = true; } column("name", STRING) { nullable = false; } } table("stock") { column("product_id", INTEGER) { nullable = false; primary = true; } column("count_pieces", INTEGER) { nullable = false; } } }