Экспорт и импорт версий проекта
Версию проекта можно выгрузить целиком — в 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, доступных пользователю |
| Ветвь | При выборе подключения подставляется его ветвь по умолчанию, затем список дополняется всеми ветвями репозитория |
Кнопка «Экспортировать» остаётся неактивной, пока не выбраны версия и подключение. Далее система:
- Подготавливает репозиторий: пустой репозиторий инициализируется, существующая ветвь клонируется, отсутствующая ветвь создаётся от ветви по умолчанию (чтобы у ветвей был общий предок и их можно было сливать средствами Git)
- Целиком заменяет дерево проекта в репозитории, включая удаление файлов элементов, удалённых в DataForge
- Проверяет изменения: если ничего не изменилось, коммит не создаётся и отображается уведомление «Изменений нет: репозиторий уже содержит эту конфигурацию»
- Создаёт коммит от вашего имени (имя и адрес электронной почты учётной записи) с сообщением вида
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 лишь очищает ссылку, не затрагивая версию.
Подключения и пароли
Параметры подключений переносятся вместе с версией. Пароль выгружается только в зашифрованном виде — в файлах выгрузки пароль в открытом виде не встречается.
| Ситуация при импорте | Результат |
|---|---|
| Пароль успешно расшифрован (импорт на экземпляре с тем же системным ключом) | Пароль восстановлен, подключение активно |
| Пароль расшифровать не удалось (другой экземпляр) либо пароль отсутствует | Пароль пустой, подключение помечено ошибкой — введите пароль заново и проверьте подключение |
| Подключение было отключено в источнике | Подключение остаётся отключённым |
Закешированная структура схемы не переносится, поэтому после импорта обновите её в разделе подключений.