Перейти к содержанию

Экспорт и импорт версий проекта

Версию проекта можно выгрузить целиком — в ZIP-архив со структурой для Git или напрямую в Git-репозиторий (GitHub, GitLab и другие Git-серверы) — и загрузить обратно в тот же или в другой проект. Обе операции вызываются из выпадающего меню рядом с переключателем версий в заголовке интерфейса.

Механизм рассчитан на две задачи:

  • резервное копирование версии в файл
  • ведение конфигурации проекта в системе контроля версий, где различия между выгрузками видны как обычный diff, а версии, выгруженные в разные ветки, можно слить средствами Git и загрузить обратно

Подключения к Git (URL репозитория, аутентификация) настраиваются отдельно в разделе подключений; в окнах экспорта и импорта выбирается одно из уже сохранённых подключений.

Доступ к функциям

  • Экспорт доступен любому пользователю, имеющему доступ к проекту, включая наблюдателей: экспорт является операцией чтения
  • Импорт доступен суперадминистраторам, администраторам компании и разработчикам (а также пользователям с уровнем доступа к проекту «разработчик» или «менеджер проекта»). Для аналитиков и наблюдателей пункт меню «Импортировать из Git» недоступен

Все операции экспорта и импорта, включая неуспешные, фиксируются в системном журнале.

Открытие окон

Откройте выпадающее меню рядом с переключателем версий в заголовке интерфейса:

Пункт меню Открываемое окно Доступность
Экспортировать в Git «Экспортировать версию проекта» Выбран проект и версия
Импортировать из Git «Импортировать версию проекта» Выбран проект и версия, роль допускает импорт

Оба окна поддерживают перенос как через файл, так и напрямую через Git — способ выбирается в поле «Режим экспорта» (при экспорте) или «Источник» (при импорте).

Состав переносимых данных

Экспорт всегда полный: выбор отдельных объектов не предусмотрен. Единственная опция — включение истории изменений РПИ.

Данные Что переносится
Данные РПИ Показатели, измерения, факты со значениями всех полей, настройки колонок и списки значений
Справочники Справочники с составом измерений и уровнями
Таблицы фактов Параметры таблиц, атрибуты и их настройки, объединения архитектора, позиции, связи со справочниками, фильтры для проверки уровня таблицы
Витрины Параметры витрин, состав элементов, скрытые элементы, фильтры, агрегации, позиции, объединения
Подключения Параметры подключения и пароль в зашифрованном виде (см. «Подключения и пароли» ниже)
Фильтры для проверки Фильтры уровня версии
Модель данных Позиции элементов на канве модели данных
История изменений РПИ Только при установленном флажке «Включать историю изменений РПИ»; не более 50 000 записей, при превышении выдаётся предупреждение

Не переносятся: физические представления витрин и данные из подключённых баз, закешированная структура схемы подключений (обновляется после импорта), пароли в открытом виде и API-ключи, комментарии к ячейкам, записи системного журнала, настройки белых и чёрных списков IP-адресов, сведения о лицензии, а также данные проектного уровня (типы данных, участники проекта, ссылка на глобальную версию).

Формат файла экспорта

Выгрузка представляет собой дерево каталогов с JSON-файлами, упакованное в архив .dfexport.zip. Структура дерева одинакова для экспорта в файл и в Git: manifest.json с метаданными выгрузки, project.json и version.json, каталог rmd/ с показателями, измерениями, фактами и справочниками в отдельных файлах, по каталогу на каждую таблицу фактов в fact_tables/, на каждую витрину в data_marts/ и на каждое подключение в connections/, а также автоматически создаваемые README.md и файл .gitattributes.

Формат детерминирован: повторный экспорт неизменившейся конфигурации даёт побайтово идентичные файлы, поэтому в Git видны только реальные изменения, а выгрузки разных версий одного проекта попадают на одни и те же пути и сравниваются между собой.

Экспорт в файл

В окне «Экспортировать версию проекта» заполните следующие поля:

Поле Обязательность Описание
Название проекта Текущий проект, поле только для чтения
Версия проекта Да Выбор версии; по умолчанию подставляется текущая. Глобальная версия отмечена значком, удалённые версии недоступны для выбора
Включать историю изменений РПИ Нет Флажок, по умолчанию снят
Режим экспорта Да «Архив со структурой для Git» (по умолчанию) или «Прямой экспорт в Git»

В режиме «Архив со структурой для Git» система упаковывает версию в архив, и браузер сразу начинает загрузку файла с именем <проект>_<версия>_<ГГГГММДД_ЧЧММСС>.dfexport.zip. После успешного экспорта отображается уведомление «Версия проекта экспортирована».

Размер выгрузки ограничен 100 МБ. Готовые архивы остаются доступными для скачивания 7 дней, после чего удаляются автоматически.

Прямой экспорт в Git

При выборе режима «Прямой экспорт в Git» в окне появляются два дополнительных поля:

Поле Описание
Подключение к Git Одно из сохранённых подключений к Git, доступных пользователю
Ветвь При выборе подключения подставляется его ветвь по умолчанию, затем список дополняется всеми ветвями репозитория

Кнопка «Экспортировать» остаётся неактивной, пока не выбраны версия и подключение. Далее система:

  1. Подготавливает репозиторий: пустой репозиторий инициализируется, существующая ветвь клонируется, отсутствующая ветвь создаётся от ветви по умолчанию (чтобы у ветвей был общий предок и их можно было сливать средствами Git)
  2. Целиком заменяет дерево проекта в репозитории, включая удаление файлов элементов, удалённых в DataForge
  3. Проверяет изменения: если ничего не изменилось, коммит не создаётся и отображается уведомление «Изменений нет: репозиторий уже содержит эту конфигурацию»
  4. Создаёт коммит от вашего имени (имя и адрес электронной почты учётной записи) с сообщением вида Export: <проект> / <версия> и отправляет его. Отображается уведомление «Экспортировано в ветвь «<ветвь>»»

Размер выгрузки в Git ограничен 200 МБ. Если включена история изменений РПИ, отображается предупреждение: история растёт с каждым экспортом и увеличивает размер репозитория, поэтому её рекомендуется включать только в файловые резервные копии.

Импорт версии

Импорт всегда выполняется в текущий проект. В окне «Импортировать версию проекта» заполните следующие поля:

Поле Обязательность Описание
Название проекта Текущий проект, поле только для чтения
Целевая версия проекта Да «Создать новую» или «Заменить существующую»
Название новой версии Для режима «Создать новую» Максимум 64 символа; первый символ — буква или цифра; допускаются буквы, цифры, _, ., - и пробел. Название должно быть уникальным среди версий проекта
Выберите версию Для режима «Заменить существующую» Список активных версий; глобальная версия отмечена значком
Источник Да «Архив со структурой для Git» (по умолчанию) или «Прямой импорт из Git»
Включать историю изменений РПИ Нет Применить историю изменений РПИ, если она есть в источнике
Загрузите файл для импорта Для файлового источника Выбор файла .zip; файл больше 100 МБ отклоняется с сообщением «Файл превышает максимальный размер 100 МБ»
Подключение к Git, Ветвь Для источника «Прямой импорт из Git» Те же поля, что и при экспорте: сохранённое подключение и ветвь репозитория

Кнопка «Импортировать» остаётся неактивной, пока не заданы целевая версия и источник.

Проверка данных

Импорт выполняется в два шага: сначала источник разбирается и проверяется, и только затем проверенные данные применяются. Ошибки блокируют импорт, предупреждения — нет.

  • Ошибки: повреждённый архив или нечитаемые файлы, отсутствие обязательных файлов, неполный манифест, версия формата новее поддерживаемой системой, некорректные или дублирующиеся идентификаторы элементов, а также превышение ограничений на объём (не более 10 000 элементов РПИ, 500 таблиц фактов, 1 000 витрин; 100 МБ для архива, 200 МБ для дерева из Git, не более 20 000 файлов)
  • Предупреждения: выгрузка сделана более старой версией продукта (часть возможностей может отсутствовать), ссылки на несуществующие элементы, дублирующиеся названия элементов, циклические зависимости формул (цикл отображается в РПИ так же, как при ручном вводе), неопознанные файлы (игнорируются), неполные сведения о слиянии

Если проверка завершилась с ошибками, импорт не начинается, и отображается уведомление с перечнем сообщений. Проверенный архив хранится сутки; если применить импорт позже, операция завершится сообщением «Загруженный архив устарел, проверьте файл заново».

Режимы применения

  • Создать новую версию. В проекте создаётся новая версия с указанным названием, содержимое которой берётся из источника. Создание версии импортом подчиняется лицензионному лимиту на количество версий. После успешного импорта отображается уведомление «Импорт завершён успешно. Версия «<название>» готова»
  • Заменить существующую версию. Операция необратима, поэтому сначала открывается окно подтверждения «Заменить существующую версию» с предупреждением и сводкой: название проекта, заменяемая версия и источник импорта (имя файла либо подключение и ветвь). Отмена подтверждения сохраняет заполненную форму импорта. При подтверждении всё содержимое целевой версии заменяется содержимым источника; сама версия сохраняет название и место в списке версий

Если заменена версия, открытая в данный момент, интерфейс автоматически перезагружает её — так же, как при переключении версий. Со страниц конкретной таблицы фактов или витрины вы будете перенаправлены в соответствующий список.

Импорт из Git и слитые ветки

При импорте из Git система клонирует указанную ветвь через выбранное подключение и находит выгрузку проекта в репозитории: сначала используется путь в репозитории, заданный у подключения к Git, иначе — единственный каталог с выгрузкой; если их несколько, выбирается принадлежащий текущему проекту. Если выгрузку найти не удалось, сообщение предложит проверить путь в репозитории у подключения к Git.

Слитые ветки. Если ветвь содержит коммит слияния, система обнаруживает его, определяет, какие экспортированные версии были слиты (ветвь, дата и автор экспорта для каждой), и записывает эти сведения о происхождении в созданную или заменённую версию. В дальнейшем они попадают в манифест каждой новой выгрузки этой версии. Если сведения о слиянии неполны, выдаётся предупреждение; импорт при этом не блокируется.

Это открывает сценарий совместной работы:

  • Пользователь A и пользователь B экспортируют свои версии в разные ветки одного репозитория
  • Ветки сливаются в Git; конфликты разрешаются обычными средствами Git (элемент, добавленный только в одной ветке, сливается автоматически)
  • Слитая ветка импортируется обратно в DataForge как итоговая объединённая версия

Версия, полученная импортом из Git, сохраняет ссылку на подключение, через которое она была загружена. Ссылка всегда отражает последний импорт: повторный импорт из Git переключает её на новое подключение, импорт из файла — снимает ссылку, а удаление подключения к Git лишь очищает ссылку, не затрагивая версию.

Подключения и пароли

Параметры подключений переносятся вместе с версией. Пароль выгружается только в зашифрованном виде — в файлах выгрузки пароль в открытом виде не встречается.

Ситуация при импорте Результат
Пароль успешно расшифрован (импорт на экземпляре с тем же системным ключом) Пароль восстановлен, подключение активно
Пароль расшифровать не удалось (другой экземпляр) либо пароль отсутствует Пароль пустой, подключение помечено ошибкой — введите пароль заново и проверьте подключение
Подключение было отключено в источнике Подключение остаётся отключённым

Закешированная структура схемы не переносится, поэтому после импорта обновите её в разделе подключений.