Архитектор данных (Data architect)¶
Архитектор данных объединяет инструменты для понимания структуры данных, контроля зависимостей и подготовки витрин. Раздел находится в Glarus BI по адресу /data-architect/. Он доступен суперпользователям и членам группы Data Analysts.
Используйте левую навигацию раздела, чтобы перейти между Конструктором схемы, Lineage, Зависимостями, ETL-заданиями и Конвейерами. Эти инструменты дополняют друг друга: схема помогает прочитать модель, Lineage показывает поток данных, Зависимости помогают оценить последствия изменений, ETL-задания создают и обновляют витрины, а Конвейеры объединяют задания в управляемый граф выполнения.
Конструктор схемы (ERD)¶
Конструктор схемы показывает таблицы, поля и связи выбранной базы данных на интерактивной ERD-диаграмме. Выбирайте базу и схему, ищите и фокусируйте таблицы, раскрывайте связи с таблицами из другой схемы и при необходимости сохраняйте раскладку или экспортируйте диаграмму.
Конструктор схемы можно открыть напрямую по ID поля Glarus BI, без дополнительных параметров таблицы и базы. Автоматический выбор доступного владельца, выделение столбца и сообщения об ошибках описаны в разделе «Прямая ссылка к полю».
Связь FK можно создать перетаскиванием между полями разных таблиц, а созданную пользователем связь — удалить с холста. Перед сохранением проверьте итоговое направление связи в окне подтверждения. Такие действия меняют только метаданные Glarus BI; реальная схема базы данных и её DDL не изменяются. Связи, существующие в самой базе данных, не удаляются через этот инструмент.
Предложения связей с помощью ИИ¶
Кнопка генерации связей с помощью ИИ предлагает кандидаты для отсутствующих FK. Перед применением изучите связь, уровень уверенности и объяснение, снимите отметки с неподходящих вариантов и только затем нажмите «Применить выбранные». Ни одна связь не создаётся автоматически.
Для предложений передаются только метаданные таблиц и полей и агрегированные показатели fingerprint-профилей, например кардинальность и диапазоны. Значения строк из базы данных не передаются. На очень большой схеме выбирайте конкретные таблицы: обработка всей схемы без ограничения может быть недоступна.
Схемы «звезда» и «снежинка»¶
В «звезде» таблица фактов, например продажи, связана внешними ключами с измерениями товара, покупателя и календаря. В «снежинке» измерение дополнительно ссылается на подизмерение: покупатель → регион → страна.
Конструктор схемы показывает таблицы, поля и связи, найденные при синхронизации метаданных базы. Таблицы на холсте можно перетаскивать; их расположение сохраняется в localStorage текущего браузера. Это локальная раскладка, которая не переносится автоматически в другой браузер или профиль.
Недостающую связь можно задать соединением полей на холсте с подтверждением. Она сохраняется как FK в метаданных Glarus BI и используется конструктором запросов и связанными фильтрами; это не команда создания ограничения FOREIGN KEY в исходной СУБД. Если администратор настроил LLM, система может предложить связи. Выберите предложения и подтвердите применение: ответ модели сам по себе не сохраняет FK.
Неявные (ленивые) соединения по внешним ключам позволяют использовать поля доступного измерения без ручного добавления соединения. В проверенном конструкторе фильтра доступны поля непосредственного измерения: раскрытие FK показывает его столбцы. Поля подизмерения второго уровня в этом списке не предлагаются. Для многоуровневой «снежинки» добавьте явные соединения по цепочке и проверьте результат.
Учебный пример в Конструкторе схемы: Orders связан с People и Products. Нажмите на снимок для полного размера.
Lineage: поток данных¶
Lineage отвечает на вопрос «откуда пришли данные и куда они идут». Выберите таблицу или, когда это возможно, отдельную колонку, чтобы проследить upstream-источники и downstream-потребителей через таблицы, модели, вопросы и ETL-задания. Это помогает понять происхождение показателя до изменения модели или источника.
Переходите по узлам графа к соответствующему объекту и расширяйте направление, которое нужно исследовать. Уровень детализации по колонкам зависит от доступных метаданных и типа запроса.
Управление графом Lineage¶
Изучайте загруженный граф Lineage с автоматической раскладкой. На этом экране нет кнопки с замком или переключателя взаимодействия. Перетаскивание отдельного узла не меняет его положение и не включает режим редактирования, создания или изменения связей; пользовательская раскладка узлов не сохраняется.
Сохраняются увеличение и уменьшение масштаба, панорамирование, мини-карта, выбор узла и переход к соответствующей сущности. Панорамирование — это перемещение всего полотна, а не отдельного узла.
Это правило относится только к экрану Lineage. Экран Зависимости сохраняет прежний замок и перемещение узлов по своим штатным правилам. ERD/FK, экспорт JSON/CSV/OpenLineage, API и права, данные и DDL не изменяются.
Псевдонимы SQL-выражений¶
В Lineage выходной псевдоним SQL-выражения не становится исходным unknown-столбцом только из-за имени после AS. Сохраняются реальные таблицы, операнды выражения и поля фильтра, от которых зависит результат.
Например, в COUNT(*) AS cnt нет отдельного исходного столбца cnt, но таблица-источник сохраняется. В MIN(created_at) AS min_dt, MAX(created_at) AS max_dt и total + tax AS total_with_tax источниками остаются реальные операнды: created_at либо total и tax, а не выходные имена.
Прямые ссылки на поля и вложенные выражения сохраняют настоящие источники; AS у реального поля не скрывает это поле. Строковые литералы и SQL-комментарии не становятся источниками.
Настоящие неразрешённые или неоднозначные ссылки не скрываются. Парсер не гарантирует разбор любого SQL-диалекта: для неподдерживаемого SQL сохраняется доступное происхождение на уровне таблиц, без предположительных связей колонок. Эти правила одинаковы для графа и обычных JSON/CSV-выгрузок текущего графа; форматы, права доступа, данные и DDL не изменяются.
Переход к списку ETL¶
Нажмите любой ETL-узел в Lineage — корневой или среди других узлов графа: в новой вкладке откроется общий список ETL-заданий по адресу /data-architect/transforms, не карточка конкретного задания.
Переход не выделяет и не фильтрует задание автоматически по его ID. Используйте обычный поиск списка, чтобы найти нужное задание. Устаревшая административная ссылка с ID больше не используется, поэтому переход не ведёт на страницу 404.
Другие типы узлов сохраняют свои маршруты. Сам переход не запускает ETL и не изменяет данные, DDL или права пользователя.
Загрузка и повтор направления¶
На странице /data-architect/lineage выберите тип Столбец, укажите идентификатор объекта и глубину обхода, затем загрузите граф.
Источники и потребители загружаются независимо. Готовая ветвь и её статистика отображаются сразу, даже если другое направление ещё загружается или завершилось ошибкой. Его состояние показывается отдельно; успешный результат не скрывается.
При ошибке или отсутствии ответа за 30 секунд у проблемного направления появляется сообщение на русском и кнопка Повторить. Повторно запрашивается только это направление, успешная ветвь не перезагружается. 30 секунд — предел ожидания ответа одного направления, не гарантия полного вычисления обоих направлений за это время.
Вид графа и экспорт¶
Начальный и расширяющийся частичный граф вписывается в доступную область до ручного управления камерой. Если вручную изменить масштаб или переместить полотно, поздние результаты и повтор направления не сбрасывают выбранный вами вид.
Загрузка другого объекта или глубины запускает новый начальный вид. Сохраняются штатные пределы масштаба: все узлы и подписи большого графа не обязательно видны одновременно.
Доступность JSON/CSV определяется по существующим правилам связного графа. Настоящий корневой объект без рёбер может отображаться при загрузке или ошибке второго направления, но экспорт остаётся недоступным; частичное состояние не включает экспорт автоматически. Полный экспорт может потребовать подготовки и не гарантирует немедленного получения полного файла.
Границы восстановления¶
Серверный обход, форматы файлов, права доступа, DDL, данные и общий снимок графа этим исправлением не меняются. Экран Зависимости сохраняет прежнее поведение камеры.
Экспорт графа¶
Экспорт¶
На экранах Lineage и Зависимости выгрузка находится в отдельном блоке «Экспорт» с верхним разделителем. Он расположен отдельно от параметров построения графа. Выбор области определяет состав скачиваемого файла и не перестраивает граф. После загрузки объекта выберите область «Текущий подграф» или «Полный граф», затем нажмите «Скачать JSON» либо «Скачать CSV». На узком экране список выбора занимает отдельную строку, а обе кнопки переносятся вместе ниже.
Текущий подграф содержит выбранный объект и связанную с ним видимую компоненту; полный граф содержит все узлы и рёбра, загруженные экраном с учётом ваших прав. Имена файлов включают тип и идентификатор объекта, направление, область и дату выгрузки.
В сборках линии 57 с этим исправлением при выгрузке полного графа на экранах Lineage и Зависимости индикатор загрузки появляется только на выбранной кнопке — JSON или CSV. Другая кнопка временно недоступна, сохраняет исходную подпись и не показывает индикатор; второй экспорт не запускается. После успешной выгрузки обе кнопки снова доступны. При ошибке появляется сообщение, индикатор исчезает, обе кнопки снова доступны для повторной попытки. Форматы файлов, содержимое графа и права доступа не меняются.
Для интеграции с каталогом или SIEM используйте GET /api/content-graph/export?format=json либо GET /api/content-graph/export?format=csv. JSON содержит детерминированные массивы nodes и edges, время формирования и версию графа. CSV-вариант возвращает ZIP-архив content-graph-export.zip с файлами nodes.csv, edges.csv и metadata.csv. Экспорт проходит тот же гейт Архитектора данных и отфильтровывает недоступные пользователю объекты; расширенные ETL-узлы доступны только суперпользователю.
Lineage по колонкам строится для поддерживаемых структурированных и нативных SQL-запросов, которые удалось разобрать. Если выражение или диалект не распознаны, Glarus BI сохраняет доступный lineage уровня таблиц и не создаёт предположительные связи колонок.
OpenLineage для внешних каталогов¶
Администратор может включить публикацию событий OpenLineage 2.0.2 для трансформаций и шагов ETL-конвейеров. Для каждого выполнения отправляется START, затем ровно одно событие COMPLETE или FAIL с доступными входами, выходом, схемой, статистикой строк и column lineage. Интеграция по умолчанию выключена; недоступность приёмника журналируется, но не меняет результат ETL.
Настройте HTTP-приёмник через glarus-openlineage-url и при необходимости bearer token через glarus-openlineage-token; одновременно можно включить UTF-8 JSON Lines sink через glarus-openlineage-file-path. HTTP redirect не выполняется. Пароли, токены и произвольные параметры подключений не попадают в dataset namespace или payload.
Суперпользователь может получить статический каталог ETL-сущностей через GET /api/glarus/open-lineage/bulk. Дашборды, вопросы и модели остаются в полном content-graph export и не выдаются за нестандартные OpenLineage jobs.
Формат HTTP-запросов OpenLineage¶
Администратор включает glarus-openlineage-enabled и задаёт адрес приёмника в glarus-openlineage-url. Для запуска ETL-задания и каждого исполняемого шага конвейера платформа формирует событие START, а при завершении — COMPLETE или FAIL. Тело HTTP POST — JSON события OpenLineage 2.0.2 с идентификатором запуска, заданием, доступными входами и выходами.
Если метаданные известны, наборы данных содержат схему и связи столбцов columnLineage. В успешном событии материализации может передаваться число строк outputFacets.outputStatistics.rowCount. У START его нет; у вычислительного шага без выходной таблицы может не быть ни выхода, ни числа строк. Схема и связи столбцов не гарантируются для ещё не синхронизированной или не созданной таблицы.
| Элемент запроса | Значение |
|---|---|
| Адрес | <glarus-openlineage-url>/api/v1/lineage. Суффикс добавляется автоматически, если адрес ещё им не заканчивается. |
| Метод и тело | POST, JSON RunEvent. Поля eventType, eventTime, run, job, inputs, outputs, schemaURL и producer. |
| Заголовки | Content-Type: application/json, Accept: application/json; при непустом glarus-openlineage-token — Authorization: Bearer <token>. |
| Таймауты | Соединение — 5 секунд, чтение — 10 секунд. HTTP-редиректы не выполняются. |
Ошибка приёмника или отправки журналируется и не меняет результат ETL; ожидание сети при этом может добавить время запуска. Успешное выполнение ETL не подтверждает доставку события, поэтому проверяйте приёмник и журналы. Интеграция по умолчанию выключена.
Тело и заголовки формирует интеграция OpenLineage. Произвольный HTTP POST со своими телом и набором заголовков отдельным шагом конвейера не предусмотрен.
Зависимости, влияние и диагностика¶
Инструмент «Зависимости» строит карту того, что использует выбранную таблицу, модель, вопрос, дашборд или ETL-задание. Перед удалением, переименованием или изменением источника загрузите downstream-граф: это и есть анализ влияния — список объектов, которые могут потребовать проверки.
На вкладке диагностики ищите битые зависимости и неиспользуемые модели или вопросы, затем переходите к проблемному элементу. Если источник требуется заменить, выберите старый и новый источник, сопоставьте поля и внимательно проверьте предварительный список затронутых объектов. Применяйте замену только после ревью: нативные запросы могут быть пропущены, а операция не должна заменять ручную проверку бизнес-логики.
В сборках линии 57 с восстановленной диагностикой полный снимок содержит битые зависимости с причинами, действительно неиспользуемые вопросы и модели, неисправные ETL-задания и затронутые объекты с цепочками влияния. Действительно используемые модели и вопросы не считаются неиспользуемыми, в том числе модель, на которую ссылается используемый вопрос.
Подробные причины и цепочки относятся к ответу API; это не означает появления новых колонок или значков в интерфейсе.
Диагностика через API
GET /api/content-graph/diagnostics доступен только администратору. До первого готового снимка ответ имеет HTTP 202, понятный status: rebuilding и поясняющее message. Готовый снимок возвращается с HTTP 200.
Во время последующей пересборки прежний полный снимок остаётся доступен с HTTP 200, прежним generated_at и stale: true: это прежний, а не новый снимок. После завершения пересборки и публикации становится доступен новый снимок.
Повторные POST /api/content-graph/rebuild во время сборки объединяются с уже выполняющейся работой и не ставят отдельную перестройку в очередь. Срок сборки не фиксирован.
Корень, связи и статистика графа¶
В сборках линии 57 с исправлением на экране «Зависимости» выберите тип объекта — таблица, столбец, модель, вопрос, дашборд или ETL — и его идентификатор. Задайте направление upstream или downstream, максимальную глубину обхода, включая 0, и нажмите Загрузить граф.
Выбранный корень присутствует в успешно загруженном графе и выделен среди остальных узлов. Ребро показывается, только если оба его конца присутствуют среди узлов этого графа.
Счётчики Узлы и Рёбра показывают количество элементов фактически показанного графа. Глубина показывает достигнутую глубину, а не заданный предел обхода.
Если после успешной загрузки связей нет, остаётся один выбранный корень, рёбер нет и видно сообщение Связи не найдены. При глубине 0 отображается только корень; фактическая глубина равна 0.
Загрузка, ошибка запроса и отсутствие доступа не являются успешным пустым результатом. Это уточнение отображения не меняет алгоритм обхода, сохранённые данные или права доступа.
Переход к столбцу из графа зависимостей¶
В сборках линии 57 с исправлением на экране «Зависимости» переход к столбцу возможен, если это реальный существующий столбец, найдена его таблица-владелец и у пользователя есть доступ к этой таблице. Открывается ERD соответствующей таблицы с выделением столбца.
Переход недоступен в четырёх случаях: показано неизвестное или синтетическое поле, для которого нет реальной записи столбца; не найдена таблица-владелец; столбец удалён; у пользователя нет доступа к таблице.
Для недоступного поля показывается подсказка Переход недоступен: поле не связано с БД. Нажатие мышью и клавиши Enter или Space не открывают ERD. При этом доступный столбец и другие типы узлов сохраняют штатную навигацию.
Это ограничение перехода в интерфейсе не меняет серверные права, сохранённые данные или DDL и не предоставляет дополнительный доступ.
ETL-задания: построение витрин¶
ETL-задание выполняет SQL-запрос или сохранённый вопрос и материализует результат как витрину. Создайте задание, укажите источник, целевую таблицу и при необходимости запустите его вручную. Задание также можно создать из существующего вопроса: его текущий запрос сохраняется как снимок, поэтому дальнейшее изменение исходного вопроса не меняет уже созданное задание. Вопросы с параметрами необходимо сначала подготовить без параметров.
Для регулярного обновления задайте расписание и используйте историю выполнений для проверки статусов, ошибок и времени запусков. Витрину можно обновлять полным пересчётом или инкрементально. При инкрементальном выполнении автор задания сам выбирает монотонную колонку-курсор, например updated_at; без подходящей колонки используйте полный пересчёт.
Ограничение инкрементального обновления
Инкрементальная загрузка добавляет новые и изменённые строки, если курсор обновляется, но не отражает удаления из источника: удалённой строки уже нет в выборке. Для полной синхронизации после удалений выполните полный refresh или используйте отдельный процесс CDC.
Если настроено общее хранилище ClickHouse, витрина может материализоваться в него из другого источника. Для таких витрин особенно важно сопоставить режим обновления с возможностями источника и проверить результат в истории выполнений.
Целевые СУБД инкрементального режима¶
В Glarus BI vGlarusbi-57.1.14662 проверен следующий сценарий с целевой базой PostgreSQL 16. Автор задания выбирает монотонную колонку-курсор из результата SQL; после успешной записи сохраняется её максимальное значение.
| Целевая СУБД | Режим | Механизм дельты |
|---|---|---|
| PostgreSQL 16 | Исходная БД, инкрементальное обновление | Первая материализация создаёт таблицу, следующие запуски выполняют INSERT … SELECT с условием курсор > последнее значение. Повтор без новых строк не добавляет строки. |
При простом курсоре изменение строки со старым значением курсора не переносится. Удаления не отражаются; опоздавшие записи с прежним курсором также не попадают в дельту. Для таких случаев проектируйте полный пересчёт или отдельный процесс синхронизации.
Общее хранилище ClickHouse использует отдельный алгоритм с ReplacingMergeTree и, при заданной уникальной ключ-колонке, составным курсором «метка времени, затем ключ». Это отдельная настройка от режима «Исходная БД». Таблица выше содержит только проверенную цель; работоспособность конкретной конфигурации общего хранилища проверяйте отдельно.
Инкремент в исходную ClickHouse для указанной сборки в таблицу проверенных целей не включён. Не переносите на неё результаты PostgreSQL и не обходите ошибку schema drift удалением существующей витрины. Перед включением расписания проверьте ручные запуски, отсутствие повторной вставки и фактические строки целевой таблицы.
Инкрементальный ETL в исходную ClickHouse¶
В Glarus BI vGlarusbi-57.1.14662 инкрементальная загрузка в исходную ClickHouse не входит в проверенные варианты: создание целевой таблицы в этом режиме завершается ошибкой. Не переносите на эту сборку результаты исправленных более поздних вариантов.
Для указанной сборки используйте проверенную целевую PostgreSQL 16 из раздела «Целевые СУБД инкрементального режима» либо отдельно проверенный процесс загрузки. При schema drift проверьте проекцию SQL и схему цели; не удаляйте существующую витрину ради обхода ошибки.
Полное обновление ETL: фактическое число строк¶
В Glarus BI vGlarusbi-57.1.14662 проверен полный пересчёт в исходную PostgreSQL 16: ручной запуск записал две строки, после изменения источника запуск по расписанию создал три строки. Значения rows в истории составили соответственно 2 и 3. Это результат данного сценария; число строк физической цели следует сверять отдельно для своего драйвера и SQL.
Полное обновление пересоздаёт витрину. Перед расписанием выполните ручной запуск и сравните результат с целевой таблицей. История показывает состояние, ошибку и время запуска; пустой результат и ошибку выполнения необходимо различать. Успех одного сценария не является гарантией счётчика для любой СУБД или автоматического отката после ошибки.
Одинаковая метка времени и повторная загрузка¶
Для инкрементальной загрузки в Общий кэш (ClickHouse ETL) задайте колонку-курсор и уникальную ключ-колонку. Их имена должны точно совпадать с именами колонок результата SQL, например UPDATED_AT и ID.
Составной cursor сравнивает сначала метку времени, затем ключ. Новая строка с той же меткой времени догружается, если её ключ больше последнего сохранённого. Строка с равным или меньшим ключом при неизменной метке времени не считается новой. Если нет новых строк, повторный запуск не добавляет дубли и не меняет сохранённый cursor.
Для Glarus BI vGlarusbi-57.1.14662 повторная материализация в общий ClickHouse с такой конфигурацией здесь не подтверждена. Таблица проверенных целей относится к PostgreSQL 16 в режиме «Исходная БД»; результаты этого режима не подтверждают общий кэш. Перед использованием общего хранилища отдельно проверьте первую загрузку, повтор без новых строк, строки с одинаковой меткой времени и соответствие схемы.
При schema drift проверьте соответствие проекции SQL целевой схеме. Не игнорируйте ошибку и не удаляйте и не очищайте существующую таблицу ради повтора. Ограничение на отражение удалений из источника сохраняется.
Точный регистр имён колонок ETL¶
Откройте Архитектор данных → ETL-задания и создайте или отредактируйте задание с инкрементальным обновлением. Имена колонок в настройках должны точно совпадать с именами результата SQL с учётом регистра.
В Glarus BI vGlarusbi-57.1.14662 примеры в форме могут использовать строчные имена id, updated_at и created_at. Примеры не заменяют имена результата SQL. Проверяйте фактические названия колонок перед заполнением ключа и курсора; обновлённые подсказки других сборок здесь не обещаются.
Используйте именно имена колонок результата SQL, а не автоматически взятые имена из физической исходной таблицы. ID и id различаются; автоматического изменения регистра нет.
Синтетический пример результата SQL:
SELECT 1 AS "ID", TIMESTAMP '2026-10-01 10:00:00' AS "UPDATED_AT"
В этом примере двойные кавычки сохраняют регистр псевдонимов. PostgreSQL приводит имена без кавычек к нижнему регистру: AS ID возвращает id, а не ID.
Для этого примера укажите ID как уникальный ключ и UPDATED_AT как курсор. Не подставляйте id или updated_at только потому, что такой пример показан в форме. Если запуск сообщает ошибку имени колонки, сравните настройки с реальным результатом SQL и исправьте имя.
При ошибке проверьте точное имя поля в результате SQL и настройках задания. Изменение подсказок само по себе не меняет SQL, сохранённый cursor, схему или алгоритм загрузки.
Список ETL-заданий¶
На странице /data-architect/transforms список показывает по 25 ETL-заданий на странице и общее количество заданий. Используйте Назад и Далее для перехода между страницами. Выбранные поиск, фильтры и сортировка сохраняются при переходе на другую страницу.
Сортировка списка¶
Если пользовательская сортировка ещё не сохранена, список открывается с вариантом Сначала новые: задания идут от более новых к более старым по дате создания. Если даты совпадают, они располагаются по имени от А до Я. Этот вариант остаётся доступен в списке сортировки.
Явно выбранный пользователем порядок сохраняется и применяется при следующем открытии списка. После создания ETL-задания список обновляется на первой странице и показывает новое задание первым; это не заменяет сохранённый выбор.
История выполнений ETL¶
Нажмите История выполнений у нужного задания: история загружается только после раскрытия и появляется под строкой выбранного задания. Она показывает по 10 запусков на странице, от новых к старым. Кнопки Назад и Далее внутри истории переключают страницы запусков, не меняя страницу списка заданий.
Кэш истории и обновление¶
Сворачивание и повторное раскрытие используют сохранённую историю без повторной загрузки уже просмотренных страниц, в том числе после минуты ожидания. Чтобы начать новую загрузку истории, обновите страницу в браузере и снова раскройте Историю выполнений.
Отображение списка¶
Колонки списка адаптируются к ширине экрана: длинные названия заданий и целевых таблиц не накладываются на соседние значения. При уменьшении окна список и раскрытая история остаются частью одной страницы.
Перенос ETL-заданий на другой экземпляр¶
Экспорт коллекций переносит вопросы и модели с их запросами, но ETL-задания и конвейеры «Архитектора данных» в этот архив не входят.
- Перенесите вопросы и модели стандартным архивом коллекции. Настройте на целевом экземпляре подключения, пароли и права на источники.
- Проверьте перенесённые запросы и структуру результата. Создайте из вопросов новые ETL-задания: построение витрин; запрос сохраняется в задании как снимок, дальнейшее редактирование вопроса не обновляет его автоматически.
- Заново задайте целевые таблицы, режим обновления и колонки курсора. Соберите конвейер, его зависимости и параметры. Идентификаторы объектов и состояние последнего курсора не следует копировать между экземплярами вручную.
- Проверьте ручной запуск и физический результат, затем настройте расписания. Историю выполнений и работоспособность уведомлений проверьте на новом экземпляре.
Конвейеры: граф выполнения ETL¶
Конвейер — это отдельный объект Data Architect, который объединяет ETL-задания и вычислительные шаги в направленный ациклический граф (DAG). ETL-задание остаётся самостоятельным объектом: удаление узла из конвейера не удаляет исходное задание и его историю.
На странице /data-architect/pipelines отображается список конвейеров. Из строки доступны запуск, история, редактирование и безопасное удаление или архивирование. Список поддерживает поиск, сортировку и постраничную навигацию; статус запуска обновляется без перезагрузки страницы.
Фильтры, сортировка и URL списка конвейеров¶
В сборках линии 57 с обновлённым списком конвейеров откройте Архитектор данных → Конвейеры (/data-architect/pipelines). Панель содержит Поиск по имени, Состояние выполнения (все, Выполняется, Не выполняется), Наличие расписания (все, есть, нет) и Сортировка. Это список конвейеров, не история запусков и не список ETL-заданий.
Доступны шесть вариантов сортировки:
- по имени — А–Я;
- по имени — Я–А;
- по дате создания — новые первыми;
- по дате создания — старые первыми;
- по дате изменения — недавно изменённые первыми;
- по дате изменения — давно изменённые первыми.
Если в URL нет выбранного порядка, по умолчанию показаны новые первыми. Порядок глобальный для всего отфильтрованного списка и применяется до пагинации, а не только внутри открытой страницы.
Имя, состояние выполнения и наличие расписания применяются одновременно по AND: конвейер должен соответствовать всем выбранным условиям. Выполняется означает хотя бы один реальный незавершённый запуск, а не включённость расписания, наличие cron или результат последнего запуска. Даже если более новый запуск уже успешен, более ранний незавершённый сохраняет состояние Выполняется. Наличие расписания — отдельный независимый фильтр. Архивные конвейеры не возвращаются в список.
Изменение фильтра или сортировки возвращает первую страницу. Поиск, оба фильтра, сортировка и номер страницы восстанавливаются из URL при обновлении, открытии скопированной ссылки и переходах Назад/Вперёд браузера. Некорректные параметры URL обрабатываются безопасными значениями по умолчанию. Это состояние ссылки, не сохранение выбора в профиле пользователя.
Если сочетание условий не даёт совпадений, список пуст, но панель остаётся доступной: измените поиск или фильтры. Поиск и фильтрация ничего не запускают, не включают и не выключают расписание, не меняют cron или сами определения. Новых API, формата данных или миграции нет; это не гарантия полной адаптивности при любой ширине.
Статус в списке конвейеров¶
Откройте Архитектор данных → Конвейеры (/data-architect/pipelines). В сборке 0.57 от 01.10.2026 при отсутствии активного запуска в колонке Статус показано Готово, при выполнении — Выполняется.
Текущий Статус отличается от последнего Результата. В сборке от 01.10.2026 список опрашивается раз в 3 секунды, пока есть выполняющийся запуск; в простое постоянного опроса нет. В более новых сборках используются бейдж Готов к запуску, спиннер при выполнении и постоянный опрос раз в 5 секунд, который обнаруживает запуск из другой вкладки или по расписанию. Это периодический опрос, а не мгновенное обновление; фактическое время зависит от сети.
Шапка конвейера и запуск¶
В сборках линии 57 с обновлённой шапкой конвейера откройте Архитектор данных → Конвейеры → нужный конвейер. Слева расположены возврат К списку конвейеров, название и строка типа/расписания. Нажмите строку типа/расписания, чтобы открыть существующую форму настроек.
Справа находятся основная кнопка Запустить, Настройки и меню Дополнительные действия. В меню доступны Настройки, Открыть визуальный редактор и Удалить; редактор и удаление не являются отдельными постоянными кнопками шапки. На узком экране запуск и меню остаются доступны, отдельная кнопка настроек скрывается, но настройки остаются в меню. Длинное название сокращается. Схема DAG, история запусков и остальная навигация этим обновлением не перерабатываются.
Если параметров нет, Запустить немедленно начинает реальное выполнение и показывает состояние. Если параметры есть, открывается прежний диалог ввода. Запуск действительно выполняет шаги и может менять данные — это не просмотр без побочных эффектов.
Пока выполняется хотя бы один запуск, кнопка недоступна с причиной Конвейер уже выполняется. Даже новый успешный результат не разблокирует её, если более ранний запуск ещё активен. Нажатие недоступной кнопки не создаёт ещё один запуск. После завершения активных запусков кнопка снова доступна. Это поведение кнопки, а не новый глобальный запрет параллельных API/cron-запусков.
Просмотр страницы, открытие меню или настроек и отмена настроек сами ничего не запускают. Изменения настроек сохраняются только явным Сохранить. Удаление по-прежнему требует подтверждения и сохраняет аудит и историю через архивирование. Права, cron, параметры и формат данных этим обновлением не меняются; новой миграции нет.
Редактор и связи¶
Откройте конвейер отдельно, чтобы перейти в редактор DAG. Перетащите ETL-задание или compute-шаг из палитры на холст, настройте свойства справа и соедините узлы от порта к порту. Положение узлов сохраняется при явном сохранении конвейера; доступны масштабирование, панорамирование, автоматическая раскладка и «Уместить на экране». Для добавления и удаления узлов и связей есть доступные клавиатурные действия.
Ручная зависимость и допустимые целочисленные branch-коды на ребре задают маршрутизацию. Автоматически найденные SQL-зависимости отмечаются отдельно. Циклы, несовместимые связи, пустые обязательные параметры и неверный branch показываются до сохранения и не допускаются сервером.
Параметры, compute и запуск¶
Параметры имеют тип и значение по умолчанию; в compute-шаге можно выбрать соединение и SQL с плейсхолдерами {{param}} и {{ctx.field}}. Один запуск проходит узлы в порядке зависимостей, а для fan-in учитывает результаты всех родителей и допустимые branch-коды. Статусы Успешно, Ошибка, Пропущено, Выполняется и Ожидает отображаются в редакторе и истории.
Секции и действия формы конвейера¶
В сборках линии 57 с обновлённой формой откройте Архитектор данных → Конвейеры → Создать или Редактировать у существующего конвейера. Compute-шаги и Параметры запуска — самостоятельные секции. Если элементов нет, показаны Нет шагов или Нет параметров и кнопки добавления; пустое состояние не создаёт пустые элементы и нулевые badges. После добавления видны компактные карточки и счётчики элементов.
Внутри секции Compute-шаги есть краткая подсказка и раскрываемое Подробнее с буквальными примерами {{param}} и {{ctx.field}}. Откройте или закройте его мышью либо перейдите клавишей Tab и нажмите Enter. После закрытия остаётся краткая подсказка. Это пояснение интерфейса, не новая SQL-семантика, пересчёт или запуск.
Введённые SQL, имя и соединение compute-шагов, а также значения параметров и значения по умолчанию сохраняются при добавлении или удалении других элементов формы. Удаление выбранного элемента не означает сохранение его полей.
Длинное содержимое прокручивается внутри окна. Отмена и Создать конвейер либо Сохранить остаются в закреплённом футере; списки соединения, типа и зависимостей доступны и при небольшом окне. Отмена закрывает форму без сохранения изменений. Правила доступности кнопок прежние: при пустом имени или без заданий кнопка создания не становится доступной.
Обновление касается отображения и удобства формы. Сохранённый формат данных, определения, зависимости, расписания и запуск не меняются; новых настроек, API или миграции нет. Открытие подсказки и изменение секций не запускают ETL. Это не гарантия полной адаптивности при любой ширине.
Длинные имена шагов на схеме конвейера¶
В сборках линии 57 с этим исправлением откройте существующий конвейер в разделе Архитектор данных → Конвейеры. На схеме в режиме просмотра (read-only, не редактор) имя остаётся внутри плитки максимум на двух строках. Длинные слова и последовательности могут переноситься внутри; при переполнении после второй строки появляется многоточие. Короткие имена видны целиком без ненужного многоточия.
Чтобы увидеть полное имя, наведите указатель на узел или перейдите к нему клавишей Tab: клавиатурный фокус обозначен видимой рамкой. Подсказка закрывается при уходе указателя или фокуса с узла. Соседние узлы и связи остаются читаемыми; переименовывать шаг или открывать редактор не требуется.
Это только отображение: сохранённые имена и определения не меняются, ETL не запускается, новые настройки и API не добавляются. Геометрия собственного renderer каждой ветки сохраняется; новые кнопки zoom/pan и автоматическое вмещение всего большого графа не вводятся.
Возможности отдельной компактной карточки, включая наведение на имя, описаны в разделе «Интерактивная карточка схемы конвейера»; правила клавиатурного фокуса разных представлений различаются.
Интерактивная карточка схемы конвейера¶
В сборках линии 57 с улучшенной карточкой схемы откройте существующий конвейер в разделе Архитектор данных → Конвейеры. Схема выполнения находится в отдельной ограниченной карточке на той же странице; шапка, история запусков, настройки и действия страницы остаются на своих местах. Это просмотр схемы, а не редактор узлов и связей.
При открытии узлы автоматически размещаются по зависимостям слева направо. Правило применяется ко всем текущим схемам, в том числе старым с отсутствующими или пересекающимися сохранёнными координатами: предварительно двигать узлы или сохранять конвейер для просмотра не нужно. Автоматические и ручные зависимости учитываются вместе; одинаковая связь не дублируется, для подписей рёбер отводится место.
Узлы имеют фиксированную одинаковую ширину внутри соответствующего представления. Компактная карточка и обычный редактор используют разную геометрию; размер на экране также зависит от масштаба. Одинаковые пиксельные размеры во всех режимах не предполагаются. В редакторе сохраняется отдельная кнопка «Автораскладка».
Навигация по большой схеме¶
- + / − увеличивают и уменьшают схему относительно центра рабочей области; рядом показан текущий процент масштаба.
- Колесо мыши внутри карточки меняет масштаб с сохранением точки схемы под указателем.
- Перетаскивание полотна основной кнопкой мыши сдвигает всю схему внутри рабочей области, не переставляя отдельные узлы.
- Уместить вписывает все узлы, маршруты связей и подписи в рабочую область карточки, в том числе у большого графа. Если после приближения часть схемы скрыта, нажмите «Уместить» для общего обзора.
При изменении размера рабочей области схема вписывается заново. Колесо и перетаскивание внутри заполненной карточки управляют схемой; за пределами карточки остаётся обычная прокрутка страницы. Масштаб и смещение относятся к текущему просмотру: их сохранение между посещениями не предусмотрено.
Легенда статусов и длинные имена¶
Легенда постоянно находится в шапке карточки и не перемещается вместе с полотном. На узле и в легенде у каждого состояния совпадают цвет и значок:
| Состояние | Цвет | Значок |
|---|---|---|
| Успешно | Зелёный | Галочка |
| Выполняется | Оранжевый | Часы |
| Ошибка | Красный | Предупреждение |
| Не запускался | Синий | Информация |
| Пропущено | Серый | Информация |
Это пять существующих состояний выполнения, новых состояний карточка не добавляет. Имя узла занимает максимум две строки; длинное непрерывное слово переносится внутри границ. Полное усечённое имя можно прочитать при наведении указателя на название. Подсказка не растягивает узел и не меняет расположение соседей. Доступность компактного узла через Tab здесь не заявляется: клавиатурный фокус из отдельного исправления длинных имён не следует переносить на другие представления.
Что меняет просмотр схемы¶
Масштабирование, перетаскивание полотна, «Уместить» и открытие карточки меняют только отображение в браузере. Они не сохраняют конвейер, не переименовывают шаги, не меняют состав узлов, связи, SQL, расписания, параметры или права и не запускают выполнение. Для редактирования, явного сохранения и запуска конвейера остаются прежние отдельные действия.
Поисковый выбор ETL-заданий¶
В сборках линии 57 с поисковым выбором ETL-заданий откройте Архитектор данных → Конвейеры → Создать конвейер. Для настройки существующего конвейера откройте его и нажмите Редактировать. Поле ETL-задания заменяет полный перечень флажков поиском с множественным выбором.
Введите часть названия: после короткой паузы появятся серверные результаты поиска по подстроке имени задания, а не по имени целевой таблицы. Используйте кнопки Следующая страница и Предыдущая страница для перехода между серверными страницами. При изменении запроса выдача начинается с первой страницы.
Выбранные задания показаны чипами над полем и отмечены в результатах. Смена поисковой строки или страницы не сбрасывает выбор. Сначала видны первые пять чипов и кнопка Ещё N с числом остальных. Разверните остальные задания, при необходимости сверните список или удалите выбранный чип его кнопкой удаления. Число выбранных заданий не ограничено.
Если появилась надпись ETL-задания не найдены, прежний выбор сохраняется. Пустая выдача сама по себе не мешает штатно сохранить валидную форму: остальные поля и выбранные задания должны проходить обычные проверки.
Ранее привязанное действительно недоступное задание остаётся выбранным с известным именем и пометкой Недоступно. Перед сохранением удалите такой чип явным действием. Отсутствие доступного задания на текущей странице поиска не означает «Недоступно». Загрузка и временная ошибка показаны отдельно; при ошибке повторите загрузку выбранного задания.
После выбора используйте штатное сохранение формы. Само сохранение не является ручным запуском конвейера; расписание остаётся отдельным механизмом и может запускать его в дальнейшем.
Ошибки формы создания конвейера¶
В сборках линии 57 с этим исправлением откройте Архитектор данных → Конвейеры → Создать. Если длинная форма отправлена с ошибками, её внутренняя область прокручивается к первой ошибке по порядку полей, фокус переходит в это поле, рядом появляется пояснение.
В неподвижном футере под кнопкой создания показана сводка Конвейер не создан: исправьте ошибки в форме. Она остаётся видна при прокрутке формы. Исправьте отмеченные поля: сводка исчезнет, после чего конвейер можно создать обычным способом.
Например, 003**? — намеренно неверное cron-выражение; 0 0 3 * * ? — обычный корректный пример Quartz для ежедневного расписания. Это не проверочный запуск.
Изменение касается навигации к ошибкам формы создания, а не всех серверных ошибок. Формат сохранённых данных, серверная проверка и расписания не меняются. Исправление полей не запускает ETL автоматически; выполнение по настроенному расписанию остаётся отдельным механизмом.
Сохранение новых compute-шагов¶
В сборках линии 57 с исправлением сохранения compute откройте Архитектор данных → Конвейеры.
- Создайте или отредактируйте конвейер и выберите ETL-задание.
- Добавьте compute-шаг, выберите доступное соединение и укажите корректный SQL.
- В обычной форме используйте штатную кнопку сохранения; в визуальном редакторе нажмите Сохранить граф. Новый compute сохраняется без прежней ошибки о значении больше нуля.
Можно добавить два новых compute-шага и задать ручную зависимость второго от первого — после сохранения она остаётся. Существующие шаги остаются частью конфигурации.
Сохранение само по себе не является ручным запуском конвейера. Настроенное расписание может выполнять конвейер в дальнейшем. Обычные серверные проверки соединения и SQL сохраняются. Исправление не меняет права и алгоритм выполнения и не изменяет ваш SQL автоматически.
Ошибки сохранения конвейера¶
В сборках линии 57 с улучшенным отображением ошибок сохранения откройте Архитектор данных → Конвейеры → создать/редактировать. Подсказки об ошибках доступны в обычной форме и визуальном редакторе конвейера.
Если сервер связал причину отказа с доступным для редактирования полем, прочитайте все сообщения рядом с ним: у имени и расписания в форме, ETL-задания, соединения и SQL compute-шагов, ручных зависимостей. В визуальном редакторе выберите узел графа: связанные с ним причины и сообщения полей находятся в панели Свойства.
Изменение поля очищает относящиеся к нему сообщения, включая связанные сообщения шага. Сообщения других неизменённых полей остаются до следующего сохранения. Исчезновение подсказки при редактировании ещё не означает, что исправление принято сервером.
Если причину нельзя сопоставить с редактируемым полем, она показывается только в общем блоке ошибок и не дублируется произвольно возле полей. Прочитайте этот блок вместе с подсказками у полей.
После исправлений снова используйте штатное сохранение формы или кнопку Сохранить граф в редакторе и проверьте результат. При следующем сохранении сообщения обновляются по его результату. Само сохранение не является ручным запуском; расписание может запускать конвейер в дальнейшем. Порядок сохранения новых compute-шагов описан в соседнем разделе.
Расписание и история¶
Для конвейера задаётся собственное cron-расписание по времени планировщика сервера; отдельного поля часового пояса у конвейера нет. Расписание восстанавливается после перезапуска приложения. Если такой конвейер уже выполняется, очередной тик записывается как «Пропущено»; это не блокировка запусков других конвейеров или ручных вызовов. История содержит тип запуска, параметры и контекст, длительность, шаги, branch-коды, причины ошибок и ссылки на связанные ETL-запуски. При завершении конвейера с ошибкой отправляется email-уведомление — см. «Уведомления о сбое конвейера». Для доставки требуется настроенная электронная почта; сам статус «Пропущено» письма не создаёт.
Перед удалением проверьте downstream-зависимости. Удаление конвейера сохраняет аудит и историю запусков через архивный механизм; права create/read/update/delete/run/history проверяются одинаково.
Уведомления о сбое конвейера¶
Когда запуск конвейера завершается со статусом «Ошибка», для него создаётся одно событие уведомления. Это относится к ручному запуску, синхронному вызову API и запуску по расписанию. Для статуса «Пропущено» письмо не отправляется. Отдельный запуск ETL-задания вне конвейера не создаёт это уведомление.
Системное уведомление настроено на группу «Администраторы» и отправляется по email. Отдельного выбора получателей в интерфейсе нет: администратор может изменить список получателей или отключить уведомление через PUT /api/notification/{id}. Для отправки писем необходима настроенная электронная почта.
Тема письма содержит имя конвейера и идентификатор запуска. В тексте указаны имя, идентификатор и тип запуска, первый упавший шаг, его сообщение об ошибке и ссылка на историю конвейера. Часто встречающиеся значения паролей, токенов, API-ключей и заголовка авторизации маскируются; сообщение ограничено 1000 символами. Параметры и контекст запуска в уведомление не входят. Успешные запуски не уведомляются; для этого события не предусмотрен вебхук.
История запусков конвейера¶
В сборках линии 57 с этой карточкой на странице отдельного конвейера под неизменённой схемой DAG расположена отдельная карточка История запусков. В фильтрах Статус и Тип запуска можно выбрать одно или несколько значений.
Для периода доступны Всё время, Сегодня, Последние 7 дней, Последние 30 дней и Произвольный диапазон. В произвольном диапазоне задайте начало и окончание, затем отдельно примените даты. Если начало позже окончания, такой черновик не применяется: исправьте даты, чтобы применить диапазон.
Фильтрация выполняется на сервере. Счётчик Найдено N показывает общее количество совпавших запусков, а не количество строк текущей страницы. На странице не более 20 запусков; кнопки Назад и Далее переключают страницы. Любой применённый фильтр возвращает первую страницу. Сбросить всё очищает статусы, типы и период и возвращает к нефильтрованной первой странице.
Нажмите Подробнее у запуска, чтобы открыть правую боковую панель: она показывает параметры, контекст, шаги и диагностику выбранного запуска. Открытие и закрытие панели не сбрасывает фильтры, список и текущую страницу.
Если совпадений нет, отображаются пустой список и Найдено 0 — это штатное состояние, а не ошибка. Просмотр истории не запускает конвейер. Повтор запуска — отдельное действие с подтверждением. Эти 20 строк относятся только к истории конвейера: в истории отдельного ETL-задания остаются 10 запусков на странице, а в списке ETL-заданий — 25 заданий.
Таблица и сортировка истории конвейера¶
В сборках линии 57 с новой таблицей истории у отдельного конвейера доступны шесть колонок: Статус, Тип запуска, Начало, Завершение, Длительность и действие Подробнее. Начало и завершение отображаются в локальных дате и времени пользователя; пока запуск не завершён, Завершение и неизвестная Длительность показаны как «—».
По умолчанию выбрано Начало по убыванию — новые запуски первыми. Нажмите заголовок Начало или Длительность, чтобы выбрать сортировку; повторный клик меняет направление. Выбор другого поля и каждое переключение направления возвращают первую страницу.
Сортировка выполняется сервером по всей отфильтрованной истории до выделения страницы, не только по видимым 20 строкам. При сортировке длительности как по возрастанию, так и по убыванию запуски с неизвестной длительностью идут после всех запусков с известной длительностью, в том числе на следующих страницах.
На странице не более 20 запусков. Счётчик 1–20 из N показывает диапазон и общее число совпадений с действующими фильтрами. Следующая страница содержит следующие 20 запусков: например, 21–40 из N. На последней странице показан только остаток, а кнопка Далее недоступна. Если история содержит до 20 запусков, пустой следующей страницы нет; устаревший номер страницы исправляется на существующую.
Подробнее передаёт выбранный запуск в существующую правую боковую панель. Закрытие панели и Escape сохраняют фильтры, сортировку, страницу и контекст таблицы. Порядок выбора и восстановления панели в обновлённых сборках описан в разделе «Выбор запуска и ссылка на панель».
Просмотр истории не запускает конвейер и не повторяет выполнение. Лимит 20 относится только к истории конвейера: в истории отдельного ETL-задания по-прежнему 10 запусков на странице, а в списке ETL-заданий — 25 заданий.
Подробности и повтор запуска¶
В сборках линии 57 с обновлёнными подробностями запуска нажмите неинтерактивную часть строки истории или Подробнее на странице отдельного конвейера. Откроются подробности именно выбранного запуска в отдельной правой боковой панели, а не под строкой таблицы. На узком экране панель занимает весь экран. В шапке показаны номер и состояние запуска, ниже — шаги и доступные диагностические сведения.
Параметры и Контекст — отдельные JSON-блоки, которые можно сворачивать независимо друг от друга. Они показывают сохранённые данные выбранного запуска, не текущие значения по умолчанию.
Закрытие панели и Escape сохраняют фильтры, сортировку, страницу и прокрутку истории. Интерактивные элементы строки выполняют только своё действие, без случайного открытия панели кликом строки; Подробнее остаётся явным действием открытия.
Пока выбранный запуск выполняется, его подробности обновляются примерно каждые 3 секунды; после завершения обновление останавливается. Закрытие панели или выбор другого запуска прекращает опрос прежних подробностей. Это интервал обновления выбранного запуска, не гарантия времени вычисления и не обещание отключения всех запросов страницы.
У завершённого запуска нажмите Повторить запуск. Для выполняющегося запуска эта кнопка не показывается. Сначала открывается подтверждение Подтвердить повторный запуск с текстом: «Будет создан новый запуск с параметрами исходного запуска. Повтор не изменяет исходную запись.» Доступны кнопки Отмена и Подтвердить.
Отмена не создаёт запуск. Подтверждение создаёт новый отдельный запуск с копией сохранённых параметров исходного запуска: сохраняются числовые и логические типы. Берутся параметры исходного запуска, а не актуальные значения по умолчанию. Исходная запись не изменяется.
Повтор — реальное выполнение шагов конвейера: он может менять данные согласно этим шагам, поэтому не считайте его просмотром без побочных эффектов. Обычный просмотр подробностей сам запуск не создаёт и выполнение не запускает.
Выбор запуска и ссылка на панель¶
В сборках линии 57 с обновлённой панелью клик по неинтерактивной части строки истории или Подробнее открывает выбранный запуск справа; выбранная строка выделяется. На широком экране ширина панели — 460 пикселей, история остаётся видимой и доступной для выбора другой строки. На узком экране панель занимает весь экран. Меню приложения и остальная страница сохраняются: новое оформление относится только к панели.
Заголовок, кнопка закрытия и нижняя кнопка Повторить запуск у завершённого запуска остаются на месте; прокручивается только содержимое панели. Полные подробности, независимые блоки сохранённых параметров и контекста и подтверждение повтора описаны выше.
В адресе страницы параметр run_id хранит выбранный запуск, а параметры истории — применённые фильтры, сортировка и страница. Ниже приведён условный пример фрагмента адреса: ?run_id=<ID запуска>; это обозначение места для идентификатора, не готовая ссылка. Скопируйте полный адрес из браузера вместе с остальными параметрами истории. После перезагрузки восстанавливаются фильтры, сортировка и страница, а после успешной загрузки текущей страницы — выбранный запуск и панель.
Закрытие панели или Escape удаляет только run_id, снимает выделение и не сбрасывает фильтры, сортировку и страницу. Выбор другой строки заменяет run_id и подробности без сброса истории. Открытие, смена выбора и закрытие заменяют текущий адрес: каждое такое действие не добавляет новую запись в историю браузера.
Панель открывается только для запуска на успешно загруженной текущей странице истории этого конвейера. Если выбранного запуска на ней нет — даже если он существует на другой странице — панель закрывается, выделение снимается, из адреса удаляется только run_id; остальные параметры истории сохраняются. Ожидание ответа или ошибка загрузки не доказывают отсутствия запуска: по ним выбор из адреса не очищается. Наличие запуска проверяется по успешному ответу для текущих фильтров, сортировки и страницы, не по старому списку.
Совместная работа над конвейерами и ETL-заданиями¶
В модуль «Архитектор данных» могут входить суперпользователи и участники группы «Data Analysts». В списках конвейеров и ETL-заданий участник группы видит только созданные им объекты, суперпользователь — все. Читать и изменять отдельный объект, запускать или удалять его может его автор либо суперпользователь; право на выполнение SQL в каждом источнике проверяется отдельно.
При сохранении конвейера клиент передаёт прочитанный номер ревизии. Сервер применяет изменения, только если номер всё ещё актуален. Если другой пользователь уже сохранил новую версию, сервер отвечает HTTP 409 (pipeline_revision_conflict) с сообщением «Конвейер был изменён другим пользователем. Перезагрузите его и повторите попытку». Перезагрузите конвейер и вручную повторите нужные изменения: автоматического объединения нет.
У ETL-заданий проверки номера ревизии нет. При одновременном сохранении автором и суперпользователем применяется последнее сохранение. Изолированных сред, ветвления, слияния изменений и просмотра diff для этой работы нет. Для общей работы над SQL используйте вопросы и модели: для них доступна история версий с возвратом к предыдущей версии и общая страница «История».
Чтобы снизить число конфликтов, распределяйте работу по отдельным конвейерам и ETL-заданиям, а общий SQL храните в вопросах и моделях.
Способы запуска: расписание, событие, API¶
ETL-задание запускается вручную, по cron при run_trigger: scheduled, внутри конвейера или через API. Значение run_trigger: none отключает его расписание. Для планового запуска задаются поля run_trigger и schedule_cron; если расписание включено, но cron не указан, запуск выполняется раз в час. У конвейера своё поле schedule_cron; пустое значение оставляет ручной и API-запуск. Оба cron-расписания используют планировщик сервера.
Другие механизмы обновления настраиваются отдельно: кэширование моделей — выбором интервала или cron, синхронизация метаданных и сканирование значений — своими расписаниями. CSV-подключение не имеет отдельного таймера скачивания FTP-файлов: доставку и актуальность файлов организует администратор; расписание ETL читает уже доступные драйверу данные.
Событийный запуск внутри конвейера описан в разделе «Запуск шагов по событию». Это зависимости шагов одного конвейера, а не подписка на произвольные внешние события.
Для программного запуска используйте действующую сессию через X-Metabase-Session либо API-ключ через X-API-Key. Ключ группы «Администраторы» даёт административные права. Доступ к модулю имеют суперпользователи и члены группы с именем Data Analysts; запустить конкретное задание или конвейер может суперпользователь либо его автор. Также проверяется право выполнения SQL в каждом источнике. Членство в группе само по себе не даёт права запускать чужой объект.
Пример запуска существующего ETL-задания. Адрес экземпляра, идентификатор задания и ключ задаются переменными окружения:
curl --fail-with-body -X POST \
"$GLARUS_BI_URL/api/glarus/transforms/$ETL_ID/run" \
-H "X-API-Key: $GLARUS_API_KEY"
Вызов POST /api/glarus/transforms/{id}/run выполняет ETL-задание синхронно; ответ содержит status, table_ref и rows. История конкретного задания: GET /api/glarus/transforms/{id}/runs (автор или суперпользователь); общий список запусков GET /api/glarus/transforms/runs доступен только суперпользователю.
Пример запуска конвейера с заранее объявленными параметрами period и limit:
curl --fail-with-body -X POST \
"$GLARUS_BI_URL/api/glarus/pipelines/$PIPELINE_ID/run" \
-H "X-API-Key: $GLARUS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"params":{"period":"2026-10","limit":2}}'
Проверьте status, run-id и результаты steps в теле ответа: HTTP 200 сам по себе не означает успешного выполнения всех шагов. История конвейера доступна через GET /api/glarus/pipelines/{id}/runs; GET /api/glarus/pipelines/{id}/run-history дополнительно поддерживает фильтры и постраничный просмотр.
Вызов POST /api/glarus/pipelines/{id}/run также выполняется синхронно и возвращает идентификатор, статус и результаты шагов. GET /api/glarus/pipelines/{id}/run-history/{run-id} возвращает подробности запуска. Повтор выполняется через POST /api/glarus/pipelines/{id}/run-history/{run-id}/retry с явным подтверждением {"confirm":true}; параметры можно переопределить. Отдельных API для отмены выполняющегося запуска или потоковой выдачи логов нет.
Переменные: области видимости и типы¶
| Уровень | Область видимости | Типы | Как задаётся |
|---|---|---|---|
| Параметры конвейера | Один запуск конвейера и его шаги | string, number, boolean | Автор задаёт имя, тип и обязательное значение по умолчанию. При ручном или API-запуске params переопределяет объявленные значения; плановый запуск использует значения по умолчанию. Шаблон — {{param}}. |
| Контекст запуска | Текущий запуск после успешного вычисления значения | Значения именованных колонок одной строки результата compute, включая число, строку, логическое значение и NULL | Compute-шаг возвращает именованные поля, доступные как {{ctx.field}}. Подстановка формирует SQL-литерал. Явная зависимость между шагами обеспечивает нужный порядок вычисления. |
| Параметры SQL-вопроса | Один SQL-запрос | «Текст», «Число», «Дата», «Фильтр поля» | Переменные {{var}} настраиваются в SQL-редакторе. Это отдельный механизм параметризации вопроса. |
У параметра конвейера нет отдельного типа «Дата»: передайте дату строкой, например 2026-10-01, и задайте нужное преобразование в SQL. Неизвестное имя, значение другого типа, неподдерживаемый тип или отсутствие обязательного значения по умолчанию отклоняются.
Для конвейера используются двойные фигурные скобки: {{period}} и {{ctx.min_id}}. Одинарные {period} не выполняют такую подстановку. В SQL и целевом имени таблицы доступны объявленные параметры; небезопасные символы в параметризованном имени таблицы заменяются на _, например mart_{{period}} при period = 2026-10 становится mart_2026_10.
Глобальные параметры подставляются в SQL как текст шаблона: автор отвечает за типы, кавычки и корректность SQL. Их не следует считать подготовленными SQL-параметрами для произвольного недоверенного ввода. В отличие от них, {{ctx.field}} автоматически превращается в SQL-литерал, включая экранирование кавычек строки; внешние кавычки вокруг такого шаблона не нужны. Контекст нельзя использовать вместо имени таблицы.
Контекст живёт в рамках запуска и не является изолированным хранилищем каждой ветки. Вычисленные поля могут использовать шаги, которые выполняются позже; для надёжного порядка задавайте зависимости. Compute должен вернуть ровно одну строку с уникальными именованными колонками; имена полей приводятся к нижнему регистру. Повторное определение уже существующего поля контекста отклоняется.
Несколько независимых расписаний¶
Одно ETL-задание может иметь собственный cron и одновременно входить в несколько конвейеров. У каждого конвейера — отдельное задание планировщика и свой cron. Например, витрина обновляется ежечасно по расписанию задания, а также участвует в ночном конвейере в 02:00.
В версии vGlarusbi-57.1.14662 cron конвейеров исполняется. Для выражений используется часовой пояс планировщика на сервере; отдельного поля выбора часового пояса у конвейера в этой версии нет. Администратор должен учитывать серверный часовой пояс при настройке времени запуска.
Если планировщик обнаруживает уже выполняющийся запуск того же конвейера, он не запускает этот тик, а добавляет в историю «Пропущено» с причиной «Предыдущий запуск ещё выполняется». Это проверка одного конвейера, а не общая блокировка ETL-задания во всех конвейерах и ручных вызовах. Согласуйте расписания общей витрины, чтобы разные способы запуска не пересекались.
Независимые расписания есть и у других объектов:
- Обновление кэша моделей — выбор интервала или «Произвольный…» cron.
- Синхронизация метаданных базы и сканирование значений полей — два отдельных расписания.
- Для одного дашборда можно создать несколько подписок с разными получателями и временем отправки.
- Для одного запроса можно создать несколько оповещений с собственными расписаниями; доступные интервалы и cron настраиваются для конкретного оповещения.
Почтовая доставка подписок и оповещений требует настроенного администратором канала отправки. Эти расписания не заменяют настройки ETL и доставки файлов.
Запуск шагов по событию¶
В конвейере зависимости задают порядок обработки шагов. После обработки входящих шагов платформа решает, выполнять следующий шаг, пропустить его или заблокировать из-за ошибки:
- Если любой родитель завершился ошибкой, зависимый шаг получает «Ошибка» с причиной
Blocked by failed dependency. Независимые ветки продолжают выполняться. - Если ошибок родителей нет и остался хотя бы один подходящий непропущенный вход, шаг выполняется.
- Если все родители пропущены или ни одна входящая ветка не подходит, шаг получает «Пропущено» с причиной
No eligible dependencies. - Корневой шаг без входящих зависимостей выполняется без ожидания другого шага.
Compute-шаг может вернуть поле branch — целое число не меньше нуля. На ребре укажите допустимые branch-коды, чтобы выбрать дальнейший маршрут. Например, значение 1 допускает ветку с кодом 1 и пропускает ветку с кодом 2. Связи и допустимые коды настраиваются на холсте редактора конвейера; результат compute также может заполнить контекст запуска.
Завершение шага действует внутри текущего запуска конвейера. Отдельного запуска по ошибке другого самостоятельного задания или по появлению файла нет. Для FTP администратор организует доставку файлов; CSV-подключение не содержит собственного периодического таймера скачивания.
Рекомендуемый порядок работы¶
- Начните с Конструктора схемы, чтобы проверить таблицы и связи.
- Используйте Lineage и Зависимости, чтобы понять источник показателя и влияние изменения.
- Просмотрите диагностику и предварительный список затронутых объектов перед заменой источника.
- Создайте или обновите ETL-задание, затем проверьте историю его выполнений.
- Объедините задания в Конвейер, проверьте связи и отрицательные сценарии, затем выполните ручной запуск.
- После проверки задайте cron и контролируйте результат по истории.
