Skip to content

Синхронизация и ETL ​

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

Сначала переключите режим

В режиме «Прямой запрос» окно открывается, но настройки не действуют: платформа предупреждает «Синхронизация недоступна в режиме „view“». Загрузка работает только в режиме «Извлечение».

Слово «view» в этом сообщении — внутреннее название режима Прямой запрос. Синхронизация ему не нужна: данные читаются из источника при каждом открытии виджета.

Первая сборка витрины ​

  1. Переключите датасет в режим Извлечение — материализация.
  2. Нажмите Синхронизация в верхней панели редактора датасета. Кнопка только открывает окно — загрузка сама не начинается.
  3. Нажмите Запустить пересборку. Окно переключится на вкладку История, а платформа сообщит «Пересборка запущена».
  4. Дождитесь статуса Успех. Если запуск упал, кнопка Лог откроет журнал запуска с шагом, на котором произошла ошибка.

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

Режим и расписание ​

Стратегия загрузки и расписание

Стратегия загрузки:

СтратегияКак работает
Полная пересборкаКаждый запуск полностью перетирает витрину
ИнкрементальнаяБерутся только изменения по watermark-полю

В текущей версии каждый запуск — полная пересборка

Выбранная стратегия сохраняется, но на запуск не влияет. И кнопка Запустить пересборку, и запуск по расписанию читают источник целиком и перетирают витрину, даже если выбрана Инкрементальная и заданы колонка-курсор и бизнес-ключ. Данные в витрине от этого верные, но нагрузка на источник та же, что у полной пересборки. Учитывайте это при выборе расписания для больших таблиц.

Выбрать Инкрементальную можно только у датасетов на базах данных: у файлов, S3 и OData она отвергается — сообщения.

Как устроена инкрементальная стратегия

Ниже — поля формы и то, как стратегия обходится с изменениями. В текущей версии на запуск она не влияет.

Каждому объекту задаются два поля:

  • Колонка-курсор (watermark) и её тип — по ней отбирается то, что появилось нового: берутся строки после отметки последнего успешного запуска.
  • Бизнес-ключ — что считать одной и той же записью: строка с уже известным ключом заменяет предыдущую версию, а не задваивается.
Что произошло в источникеЧто будет в витрине
Добавилась строкаПопадёт при следующем прогоне, если её значение курсора больше прежнего
Строка изменилась, курсор обновилсяНовая версия заменит прежнюю по бизнес-ключу
Строка изменилась, а курсор — нетИзменение не приедет: прогон её не выберет
Строка удалена в источникеОстанется в витрине: инкремент не знает об удалении

Поэтому при инкременте нужна периодическая полная пересборка — например, ночная, — или курсор, который меняется при любой правке строки.

У инкрементальной загрузки свой ключ сортировки

Задать Ключ сортировки вручную для инкрементального объекта нельзя — платформа не примет настройку: порядок хранения в этом режиме определяется бизнес-ключом.

Расписание задаётся cron-выражением; под полем — готовые варианты: Каждые 6 часов, Дважды в день, 00:00 и 12:00, Каждую ночь в 03:00, По будням в 06:00, По выходным в 04:00, По воскресеньям в 02:00, 1-го числа в 00:00, Раз в квартал, 1-го в 00:00 и Только вручную. Значения cron расшифровывает Шпаргалка по синтаксису — раскройте её под полем. Рядом с кнопкой Запустить пересборку написано, когда витрина пересоберётся в следующий раз. Без расписания пересборка запускается только этой кнопкой.

Размер пачки — сколько строк забирать из источника за один заход.

Хранение ​

Настройки хранения витрины

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

Форма витрины определяет, как данные лягут в хранилище:

ВариантЧто происходит
Таблица на объектКаждый объект лежит отдельно, связи считаются при запросе
Одна плоская таблицаОбъекты соединяются при загрузке, запросы читают одну таблицу

Дальше настройки задаются для каждого объекта отдельно — объект выбирается в списке:

  • Ключ сортировки (ORDER BY) — первичный индекс таблицы. Вперёд ставьте колонки, по которым чаще фильтруют. Без ключа таблица читается целиком на каждый запрос.
  • Партиционирование (PARTITION BY) — режет таблицу на куски: запрос за период читает только свои партиции, а старые данные удаляются целиком. Слишком дробное разбиение замедляет запросы: разумный ориентир — партиция на месяц.
  • Индексы пропуска — позволяют не читать куски данных, где искомого значения заведомо нет. Полезны для колонок вне ключа сортировки.

У каждого индекса задаются четыре вещи: имя, колонка, тип и гранулярность — сколько гранул данных он покрывает. Типов три:

ТипКогда брать
minmaxЗначения в колонке идут по возрастанию или скачками — даты, суммы, идентификаторы
set(100)Мало разных значений на гранулу: статус, категория, город
bloom_filterМного разных значений, а запросы идут точным равенством — идентификаторы клиентов, артикулы

История запусков ​

После нажатия Запустить пересборку окно само переходит на вкладку История.

История запусков синхронизации

Сверху три показателя:

ПоказательКак считается
Успешных за 7 днейуспешные запуски из всех, начатых за последние семь дней, — например, «5 / 6»
Среднее времясредняя длительность всех завершённых запусков в списке, не только за неделю
Прирост строк / деньсреднее из положительных приростов между соседними запусками. Время между запусками не учитывается: при запуске раз в час число покажет прирост за час, а не за день

Ниже — таблица запусков, новые сверху:

КолонкаЧто показывает
Запусквремя начала
Длительностьсколько шла сборка, в целых секундах: запуск короче полсекунды показан как «0с»
Загружено / прочитано · Δсколько строк легло в витрину и сколько прочитано из источника; число справа — на сколько строк витрина изменилась с прошлого запуска: рост зелёным, уменьшение серым; без изменений числа нет. У запуска, который ещё идёт, здесь минус — см. ниже
Статуссм. таблицу ниже

В строке запуска есть кнопка Лог — она открывает журнал запуска по шагам, у идущего запуска — ещё и Отменить. Пока запуск в очереди или идёт, у него «0 / 0» и прирост со знаком минус, например «−1 284»: строки ещё не записаны. Витрина при этом не пустеет — после завершения запуска числа обновятся.

СтатусЧто означает
В очередиЗадание принято, но ещё не начато
В процессеИдёт прямо сейчас; журнал такого запуска обновляется сам
УспехВитрина пересобрана
ОшибкаЗадание прервано; причина — в журнале запуска
ОтменёнОстановлен кнопкой Отменить или удалением датасета. Витрина публикуется целиком после выгрузки всех объектов, поэтому отмена до этого момента оставляет прежнюю витрину

Числа строк в таблице округлены до тысяч

От тысячи строк и выше таблица и журнал показывают число в тысячах: 1 284 и 1 250 строк выглядят одинаково — «1K / 1K». Поэтому расхождение прочитанного и загруженного меньше пятисот строк на экране не видно, а прирост рядом с округлённым числом может выглядеть странно: переход с 1 600 на 2 200 строк показан как «2K / 2K +600».

Точные значения отдаёт запрос GET /api/datasets/{id}/extracts — поля rows_read и rows_written, там же режим (mode) и способ запуска (trigger) — см. REST API. У исправной сборки оба числа совпадают: витрина из 1 284 строк даёт 1 284 в обоих полях.

Вместе с датасетом удаляется витрина

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

Данные в источнике не изменяются, но выгруженное придётся собирать заново.

Вкладки в разработке ​

Три вкладки окна помечены самим интерфейсом как раздел в разработке:

ВкладкаДля чегоСостояние
ФильтрыУсловия отбора на стороне источника, чтобы уменьшить объём загрузкиУсловия не сохраняются
ПреобразованияСопоставление колонок источника и витрины: приведение типа, нормализация, формулаНастройки не сохраняются
УведомленияОповещения об успешных и неуспешных запускахКаналы не настраиваются. Уведомление в ленту уже получает тот, кто запустил пересборку вручную, — уведомления

Что дальше ​

  • Журнал запуска — ход задания по шагам, повторы и тексты ошибок.
  • Материализация — чем режим извлечения отличается от прямого запроса и что меняется для виджетов.
  • Кеши и лимиты — почему свежие данные иногда доходят до виджета не сразу.