Перемотайте и переиграйте конвейер

Important

Эта функция доступна в бета-версии. Администраторы рабочей области могут управлять доступом к этой функции на странице "Предварительные версии ". См. статью "Управление предварительными версиями Azure Databricks".

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

Rewind одновременно восстанавливает версии таблиц, смещения потокового источника и состояние оператора, чтобы при повторном выполнении не пропускались записи и не создавались дубликаты. Три операции перерабатывают данные и решают разные задачи:

  • Rewind предназначен для восстанавливаемого конвейера, который записал некорректные данные из известной точки времени, например, после неудачного преобразования, искажённого входа или некорректного развертывания кода. Он восстанавливает данные таблицы, смещения источника и состояние оператора до возникновения проблемы и переобрабатывает только затронутые данные, сохраняя состояние оператора. Данные до этого момента остаются нетронутыми.
  • Полное обновление восстанавливает таблицу из всех доступных исходных данных и удаляет её текущее содержимое. Используйте это, чтобы пересчитать всё с нуля, или если изменение в коде несовместимо с существующим состоянием.
  • Сброс контрольной точки восстанавливает конвейер, у которого контрольная точка недействительна или повреждена, либо заблокирована изменением кода, несовместимым с контрольной точкой. Он сбрасывает контрольную точку и продолжает движение вперёд, сохраняя текущее содержимое таблицы. Rewind не может восстановить такие случаи, поскольку он не ослабляет правила совместимости Structured Streaming.

Требования

Требование Detail
Channel Конвейер должен находиться на канале предварительного просмотра. См. раздел "Настройка конвейеров".
Configuration Установите pipelines.rewind.betaEnabled конфигурацию конвейера на true, затем запустите конвейер один раз. Каждый поток становится перемотаем назад только после завершения обновления с включенным путешествием во времени.
Режим конвейера Конвейеры, запускаемые по триггеру, и непрерывные конвейеры. Режим реального времени не поддерживается.
Sources Таблицы Delta, потоковые таблицы, Kafka и Auto Loader.
Targets Потоковые таблицы и материализованные представления.
Flows Потоки потоковой обработки и потоки AUTO для захвата изменённых данных (CDC), включая целевые объекты SCD типа 1 и SCD типа 2. Поддерживаются соответствующие запросы, такие как агрегации, объединения и дедупликация.

Каждый поток в трубопроводе должен соответствовать этим требованиям. Пока pipelines.rewind.betaEnabled есть true, конвейер, содержащий поток, не квалифицированный, не проходит обновления. Убедитесь, что каждый поток соответствует указанным вышеуказанным требованиям, прежде чем включать его.

Note

Конвейер, для которого значение pipelines.rewind.betaEnabled установлено на true, не может вернуться в канал Current, пока канал Current не будет обновлён до среды выполнения, поддерживающей возврат.

Как работают перемотка и повтор

Перемотка и повтор — это отдельные шаги.

Rewind восстанавливает каждую таблицу к версии, которую она имела на момент точки перемотки, и сбрасывает контрольные точки потоков, отслеживающие, насколько далеко был прочитан каждый поток. Ваши преобразования не выполняются, и исходные данные не перерабатываются.

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

Конвейер автоматически генерирует точки перемотки примерно раз в час и сохраняет их в течение 7 дней. Созданному вами конвейеру не к чему возвращаться, пока не появится его первая версия.

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

Перемотайте конвейер с помощью интерфейса

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

  1. На странице конвейера нажмите кнопку со значком шеврона вниз рядом с Run pipeline, затем нажмите Rewind pipeline.
  2. Выберите точку возврата или используйте быструю команду, например, Вернуться ко вчерашнему дню или Вернуться к последней точке. Нажмите кнопку Далее.
  3. Выберите таблицы, которые включить. Используйте представление Graph для выбора наборов данных в графе конвейера или List для их выбора из таблицы. Оставьте выбранным параметр Сбросить все контрольные точки (по умолчанию), чтобы восстановить смещения источника и состояние оператора вместе с данными таблицы, чтобы конвейер повторно обработал данные, начиная с точки перемотки. Очистите его, чтобы восстановить только данные таблицы, без повторной обработки, например, если вы хотите восстановить содержимое таблицы, но не хотите повторно обрабатывать затронутые данные. Этот параметр должен быть одинаковым для таблицы и её вышестоящих объектов, и его нельзя снять для потока, который считывает данные из внешнего источника, такого как Kafka или Auto Loader. Нажмите кнопку Далее.
  4. Просмотрите точку перемотки, контрольную точку и затронутые наборы данных, затем нажмите Rewind.

Запустите конвейер для повторного воспроизведения данных.

Можно перематывать назад несколько раз. Каждая перемотка заменяет предыдущую, так что вы можете восстановиться после неудачного повтора, перемотав в другом месте.

После перемотки назад

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

Повторный запуск возможен только в том случае, если текущее определение конвейера обработки совместимо с восстановленным состоянием; откат не ослабляет правила совместимости Structured Streaming. Сведения о том, какие изменения совместимы, см. в разделе «Типы изменений в запросах Structured Streaming». Материализованные представления следуют пакетной семантике и терпят более широкие изменения схемы, но всё равно не работают, если зависимость несовместима.

Сбой во время перемотки может оставить конвейер в частично перемотанном состоянии. Имеется два варианта:

  1. Вернитесь снова к той же самой точке или к другой, и конвейер сойдётся к этой точке.
  2. Чтобы заставить конвейер начать обычное обновление, несмотря на неполную перемотку, установите pipelines.allowUpdateAfterIncompleteRewind и true перезапустите конвейер.

На сколько назад можно перемотать

Точки перемотки хранятся в течение 7 дней. В этом окне перемотка не работает, если нужные данные уже удалены. Проверьте следующее, прежде чем полагаться на перемотку:

  • VACUUM или короткий delta.deletedFileRetentionDuration на столах. См. статью "Работа с журналом таблиц".
  • Срок хранения данных в источнике короче, чем интервал, на который вы хотите отмотать назад, например топик Kafka, который хранит данные один день.

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

Ограничения

  • Rewind не может восстановить конвейер к состоянию, предшествующему полному обновлению.
  • Точки отката хранятся в течение 7 дней, и откат завершается сбоем, если история таблицы или исходные данные, необходимые для возврата к этой точке, уже удалены, например, с помощью VACUUM или из-за короткого срока хранения исходных данных. См. Насколько далеко можно перемотать назад.
  • Режим реального времени не поддерживается.
  • Kinesis, Pulsar, Google Pub/Sub и пользовательские источники, созданные с помощью данных DSv2 или Python API, не поддерживаются в качестве источников.
  • Внешние и кастомные раковины не поддерживаются, включая раковины, определённые с create_sink(). См. раздел Использование приёмников в конвейерах.
  • Потоковые таблицы, использующие фильтрацию строк или маскирование столбцов, нельзя вернуть в предыдущее состояние. См. статью "Вручную применить фильтры строк и маски столбцов".
  • Для обратной перемотки с сохранением состояния требуется хранилище состояний RocksDB, которое конвейеры используют по умолчанию. Перемотка не удаётся для потока, настроенного с другим хранилищем состояний.
  • Некоторым потоковым таблицам AUTO CDC требуется обновление, прежде чем их можно будет перемотать назад. Конвейер уведомляет вас, когда вы запрашиваете перемотку назад.
  • Материализованные представления могут полностью пересчитываться, а не инкрементально обновляться после отката. См. инкрементальное обновление материализованных представлений.
  • Rewind охватывает один конвейер и не координируется с внешними считывателями или другими конвейерами, читающими те же таблицы.
  • Rewind не восстанавливает код конвейера, конфигурацию конвейера или метаданные объектов Unity Catalog, такие как теги и гранты.

Дополнительные ресурсы