Отслеживание строк в Azure Databricks

Функция доступна в Databricks Runtime 14.1 и выше; отслеживание строк присваивает каждой строке стабильные идентификаторы строки и версии фиксации, что позволяет отслеживать происхождение данных на уровне отдельных строк. Для некоторых добавочных обновлений для материализованных представлений требуется эта функция.

Все таблицы Apache Iceberg версии 3 включают отслеживание строк. Ознакомьтесь с функциями Apache Iceberg версии 3. Для таблиц Delta Lake необходимо явно включить отслеживание строк.

Note

Включение отслеживания строк обновляет протокол записи таблиц и может повлиять на совместимость с внешними клиентами Delta Lake. См. сведения о совместимости функций Delta Lake и протоколах.

Включение отслеживания строк в таблицах Delta Lake

Чтобы включить отслеживание строк в таблице Delta Lake, задайте свойство delta.enableRowTracking = true таблицы во время создания таблицы:

CREATE TABLE table_name
TBLPROPERTIES (delta.enableRowTracking = true)
AS SELECT * FROM source_table;

Чтобы включить отслеживание строк в существующей таблице Delta Lake, используйте следующий пример:

ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = true);

Important

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

Предупреждение

Если ваша таблица используется как целевая таблица для непрерывной записи, например для нагрузок Structured Streaming, приостановите операции записи перед тем, как включить отслеживание строк, и возобновите их после завершения этой операции. Использование ALTER TABLE для включения отслеживания строк обновляет метаданные таблицы, из-за чего любые параллельные операции записи завершаются с ошибкой MetadataChangedException на время выполнения операции. См. исключения при конфликтах.

Клонирование таблицы создает отдельную историю, поэтому идентификаторы строк и версии фиксации строк в клонированных таблицах не соответствуют исходной таблице.

Поля метаданных

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

Название столбца Type Ценности Explanation
_metadata.row_id Long Уникальный идентификатор строки. Строка сохраняет тот же идентификатор всякий раз, когда её изменяют с помощью инструкции MERGE или UPDATE.
_metadata.row_commit_version Long Версия Delta журнала или таблицы, на которой строка была в последний раз вставлена или обновлена. При каждой модификации строки с помощью инструкции MERGE или UPDATE ей назначается новая версия.

Некоторые операции хранят эти поля метаданных с помощью журнала транзакций. Выполнение OPTIMIZE или REORG операции в таблице с включенным отслеживанием строк перезаписывает файлы данных для хранения этих полей.

Отключение отслеживания строк в таблицах Delta Lake

Чтобы отключить отслеживание строк в таблице Delta Lake, задайте для свойства таблицы значение false.

ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = false);

Important

Отключение отслеживания строк не удаляет соответствующую функцию таблицы и не изменяет версию протокола таблицы. Кроме того, он не удаляет поля метаданных из целевой таблицы. Чтобы полностью удалить функцию таблицы и изменить протокол, используйте DROP FEATURE. См. Управление функцией удаления таблицы Delta Lake и понижение протокола таблицы.

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

Ограничения

Идентификаторы строк и поля метаданных версий фиксации строк недоступны при чтении канала измененных данных. См. Использование канала передачи данных об изменениях в Azure Databricks.