Замена источников в модели данных

При создании и редактировании моделей данных могут возникать ситуации, когда изначально используется один источник данных, но впоследствии требуется заменить его на другой с тем же набором данных. Например, сначала строим модели и визуализации на базе выгрузки из 1С, а потом подключаемся к самой 1С. Чтобы избежать повторного создания модели и визуализаций, можно легко заменить источник данных в рамках модели, не затрагивая при этом визуализации.

Замену источника данных в модели можно осуществить несколькими способами. Давайте рассмотрим каждый из них, взяв за пример ситуацию замены Excel файла на базу данных.
Поля в Excel файле (cv-файл) имеют следующую структуру -

Поля в таблице public.cv базы данных sample имеют следующую структуру, и, соответственно те, что нужно заменить из файла должны быть переименованы аналогично Excel файлу (cv-файл) –

Важно соблюдать следующие условия:

  1. Названия полей, на которых строятся виджеты, должны совпадать в новом и старом источниках. Если названия полей аналогичны, дополнительные скрипты не понадобятся. Например, вы заранее решили использовать одинаковые названия полей в файле и базе данных, предвидя возможность замены источника данных.
  2. Перед тем как добавить новый источник на схему модели, необходимо сначала удалить из модели старый. Иначе новые поля будут иметь дополнительный префикс в названии, что помешает успешной замене данных.

Первый способ
Создаётся ETL-блока “SQL-блок”, где применяется SQL-выражение для переименования полей нового источника аналогично старому.

Шаг 1 Добавляем в модель новый источник, который заменит старый. Удаляем из схемы модели старый источник и после этого добавляем новый.

Шаг 2 Создаём ETL-блок “SQL-блок” и добавляем в этот блок вложенный объект из нового источника (в примере - объект public.cv).

Шаг 3 В “SQL-блоке” с помощью SQL-выражения задаем имена полей нового источника таким образом, чтобы они соответствовали именам полей старого источника.
Нажимаем кнопку «Выполнить», чтобы удостовериться, что получаем нужные данные. После проверки выполнения блока наживаем «Сохранить».

Более подробную информацию о блоке SQL можно найти по ссылке.
Пример реализации.

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

Шаг 1 По аналогии с первым вариантом добавляем в модель данных новый источник, чтобы заменить старый. Удаляем из схемы модели старый источник и после этого добавляем новый.

Шаг 2 Добавляем модель пустой блок «Декоратор» и настраиваем параметры:
• Функция для получения схемы: change_names
• Функция для построения данных: handle_data

Шаг 3 Добавляем в этот блок вложенный объект из нового источника (в примере - объект public.cv).

Шаг 4 Открываем ETL-редактор и добавляем в скрипт модели функцию change_names и handle_data. Отладку функций можно проводить прямо в ETL-редакторе, выполняя отсюда запуски скрипта модели на тестовых данных. После того как результаты тестовых запусков подтвердят работоспособность функции получения данных, выполняем окончательную публикацию скрипта.

Описание блока «Декоратор» по ссылке.
Посмотреть пример реализации.

Третий способ
Выполняется SQL-запрос для нового источника с указанием полей для замены и их названий.

Шаг 1 Добавляем в модель данных новый источник, который мы хотим заменить на старый. Удаляем из схемы модели старый источник.

Шаг 2 Добавляем SQL-запрос с новому источнику, в котором сразу указываем какие именно поля нужно заменить , и задаем их названия (соответствующие старым). Используем кнопку “Выполнить” для проверки правильности запроса, а затем сохраняем, нажав на кнопку “Сохранить”.

Шаг 3 После этого добавляем SQL-запрос на схему и нажимаем Обновить.

Пример можно посмотреть по ссылке.

Можно воспользоваться любым из предложенных способов замены источника в модели, разница между ними только в подходе, который будет использован для замены одного источника на другой. Эти методы применимы для различных типов источников данных, включая файлы, БД, данные по API, ранее созданные модели и другие источники.