Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье содержатся сведения о включении чтения с использованием формата Iceberg для таблиц, хранящихся в Delta Lake в Azure Databricks. Для этой функции требуется Databricks Runtime 14.3 LTS или более поздней версии.
Примечание.
Эта функция ранее называлась Delta Lake Universal Format (UniForm).
Вы можете настроить внешнее подключение, чтобы каталог Unity действовал в качестве каталога Iceberg. См. Доступ к таблицам Azure Databricks из клиентов Apache Iceberg.
Как работает Iceberg (UniForm)?
Delta Lake и Iceberg состоят из файлов данных Parquet и слоя метаданных. Включение чтения Iceberg настраивает ваши таблицы для автоматического создания метаданных Iceberg асинхронно, без изменения данных, чтобы клиенты Iceberg могли читать таблицы Delta, управляемые Azure Databricks. Одна копия файлов данных обслуживает несколько форматов.
Внимание
- Таблицы с включенной поддержкой чтения Iceberg используют Zstandard вместо Snappy в качестве кодека сжатия для базовых файлов данных Parquet.
- Создание метаданных Айсберга выполняется асинхронно на вычислительных ресурсах, используемых для записи данных в таблицы Delta, что может увеличить использование ресурсов драйвера.
- Для документации по устаревшей функции таблицы UniForm
IcebergCompatV1
смотрите раздел UniForm IcebergCompatV1в устаревшей версии.
Требования
Чтобы включить чтение Iceberg, необходимо выполнить следующие требования:
- Таблица Delta должна быть зарегистрирована в каталоге Unity. Поддерживаются как управляемые, так и внешние таблицы.
- Таблица должна иметь включенное сопоставление столбцов. См. как переименовывать и удалять столбцы с использованием сопоставления столбцов в Delta Lake.
- Таблица Delta должна иметь
minReaderVersion
>= 2 иminWriterVersion
>= 7. См. сведения о совместимости функций Delta Lake и протоколах. - Записи в таблицу должны использовать Databricks Runtime 14.3 LTS или более поздней версии.
Примечание.
Вы не можете включить векторы удаления в таблице, для которой активирован режим чтения Iceberg.
Используйте REORG
для отключения и очистки векторов удаления при включении чтения с использованием Iceberg в существующей таблице с включенными векторами удаления. См. раздел Включение или обновление поддержки чтения Iceberg с помощью REORG
.
Включение операций чтения Iceberg (UniForm)
Внимание
При включении чтения с использованием Iceberg в таблицу добавляется функция протокола записи IcebergCompatV2
. Только клиенты, поддерживающие табличную функцию, могут записывать в таблицы с включённой поддержкой чтения Iceberg. В Azure Databricks необходимо использовать Databricks Runtime 14.3 LTS или более поздней версии для записи в включенные таблицы.
IcebergCompatV2
зависит от сопоставления столбцов. После включения IcebergCompatV2
для таблицы невозможно удалить функцию columnMapping
таблицы.
Вы можете отключить считывание Iceberg, убрав свойство таблицы delta.universalFormat.enabledFormats
. Обновление до версий протокола чтения и записи Delta Lake не может быть отменено.
Чтобы включить чтение Iceberg, необходимо задать следующие свойства таблицы:
'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'
Когда вы впервые включаете функцию чтения Iceberg, начинается асинхронное создание метаданных. Эта задача должна завершиться до того, как внешние клиенты смогут запрашивать таблицу с помощью Айсберга. См. проверку состояния генерации метаданных Iceberg.
Список ограничений см. в ограничения.
Включить операции чтения Iceberg во время создания таблицы
Сопоставление столбцов должно быть включено для использования чтения в формате Iceberg и не может быть отменено после включения. Это происходит автоматически, если во время создания таблицы включены возможности Iceberg, как показано в следующем примере:
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Включение чтения Iceberg на существующей таблице
В Databricks Runtime 15.4 LTS и более поздних версиях вы можете включить или обновить чтение Iceberg на существующей таблице, используя следующий синтаксис:
ALTER TABLE table_name SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Активация или обновление поддержки чтения Iceberg с использованием REORG
Вы можете использовать REORG
для включения операций чтения Iceberg и перезаписи базовых файлов данных, как показано в следующем примере:
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
Используйте REORG
, если хотя бы один из следующих пунктов истин.
- В таблице включены векторы удаления.
- Ранее вы включили версию
IcebergCompatV1
UniForm Iceberg. - Необходимо читать данные из Iceberg-двигателей, которые не поддерживают файлы Parquet в стиле Hive, таких как Athena или Redshift.
Когда происходит создание метаданных Айсберга?
Azure Databricks активирует создание метаданных асинхронно после завершения транзакции записи Delta Lake. Этот процесс создания метаданных использует те же вычисления, что и транзакция Delta.
Примечание.
Вы также можете вручную активировать создание метаданных Iceberg. См. инструкцию по преобразованию метаданных Iceberg вручную.
Чтобы избежать задержек записи, связанных с созданием метаданных, таблицы Delta с частыми фиксациями могут сгруппировать несколько фиксаций Delta в одну фиксацию в метаданные Iceberg.
Delta Lake гарантирует, что выполняется только один процесс создания метаданных в заданном вычислительном ресурсе. Фиксации, которые запускают второй параллельный процесс создания метаданных, успешно фиксируются в Delta, но не запускают асинхронную генерацию метаданных Iceberg. Это предотвращает каскадную задержку для создания метаданных для рабочих нагрузок с частыми фиксациями (в секундах до минут между фиксациями).
См. версии таблиц Delta и Iceberg.
версии таблиц Delta и Iceberg
Delta Lake и Iceberg поддерживают запросы с функцией временного перехода, используя версии таблиц или метки времени, хранящиеся в метаданных таблицы.
Как правило, версии таблицы Delta не соответствуют версиям Iceberg по метке времени фиксации или идентификатору версии. Чтобы проверить, какая версия таблицы Delta соответствует заданной версии таблицы Айсберга, можно использовать соответствующие свойства таблицы. См. проверку состояния генерации метаданных Iceberg.
Проверка состояния создания метаданных Iceberg
Включение операций чтения Iceberg в таблице добавляет в каталог Unity и метаданные таблицы Iceberg следующие поля, предназначенные для отслеживания состояния создания метаданных:
Поле метаданных | Описание |
---|---|
converted_delta_version |
Последняя версия таблицы Delta, для которой метаданные Iceberg были успешно созданы. |
converted_delta_timestamp |
Метка времени последнего коммита Delta, для которого метаданные Iceberg были успешно созданы. |
В Azure Databricks можно просмотреть эти поля метаданных, выполнив одно из следующих действий.
- Обзор раздела
Delta Uniform Iceberg
, возвращенногоDESCRIBE EXTENDED table_name
. - Просмотр метаданных таблицы с помощью обозревателя каталогов.
- Использование REST API для получения таблицы.
Сведения о том, как просматривать свойства таблицы за пределами Azure Databricks, см. в документации для клиента средства чтения Iceberg. Для OSS Apache Spark эти свойства можно просмотреть с помощью следующего синтаксиса:
SHOW TBLPROPERTIES <table-name>;
Вручную активировать преобразование метаданных Iceberg
Вы можете вручную активировать создание метаданных Iceberg для последней версии таблицы Delta. Эта операция выполняется синхронно, что означает, что при завершении оглавление, доступное в Iceberg, отражает последнюю версию таблицы Delta, доступной при запуске процесса преобразования.
Эта операция не должна быть необходимой в обычных условиях, но может помочь в следующих случаях:
- Кластер завершается до успешного создания автоматических метаданных.
- Ошибка или сбой задания прерывает создание метаданных.
- Клиент, который не поддерживает создание метаданных UniForm Iceberg, записывает данные в таблицу Delta.
Используйте следующий синтаксис для запуска создания метаданных Iceberg вручную:
MSCK REPAIR TABLE <table-name> SYNC METADATA
См. REPAIR TABLE.
Чтение Iceberg с помощью пути метаданных JSON
Для некоторых клиентов Iceberg требуется предоставить путь к файлам метаданных с версиями для регистрации внешних таблиц Iceberg. Каждый раз, когда Azure Databricks преобразует новую версию таблицы Delta в Айсберг, он создает новый JSON-файл метаданных.
Клиенты, использующие пути JSON метаданных для настройки Айсберга, включают BigQuery. Дополнительные сведения о конфигурации см. в документации для клиента средства чтения Iceberg.
Delta Lake хранит метаданные Iceberg в каталоге таблицы согласно следующему шаблону.
<table-path>/metadata/<version-number>-<uuid>.metadata.json
В Azure Databricks можно просмотреть это расположение метаданных, выполнив одно из следующих действий.
- Обзор раздела
Delta Uniform Iceberg
, возвращенногоDESCRIBE EXTENDED table_name
. - Просмотр метаданных таблицы с помощью обозревателя каталогов.
- Используя следующую команду с REST API:
GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>
Ответ содержит следующие данные:
{
...
"delta_uniform_iceberg": {
"metadata_location": "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
}
}
Внимание
Клиентам для чтения Iceberg на основе пути может потребоваться вручную обновить и освежить пути JSON метаданных, чтобы читать текущие версии таблицы. Пользователи могут столкнуться с ошибками при запросе таблиц Iceberg с использованием устаревших версий, так как файлы данных Parquet удаляются из таблицы Delta с VACUUM
.
Ограничения
Следующие ограничения существуют для всех таблиц с поддержкой чтения Iceberg:
- Операции чтения Iceberg не работают с таблицами с включенными векторами удаления. См. раздел " Что такое векторы удаления?".
- Разностная таблица должна быть доступна по имени (а не пути), чтобы автоматически активировать создание метаданных Iceberg.
- Чтение Iceberg невозможно включить на материализованных представлениях или потоковых таблицах.
- Таблицы Delta с активированным чтением Iceberg не поддерживают типы
VOID
. - Поддержка клиента Iceberg доступна только для чтения. Запись данных не поддерживается.
- Клиенты систем чтения Iceberg могут иметь свои собственные ограничения, независимо от поддержки Azure Databricks для чтения данных Iceberg. См. документацию для выбранного клиента.
- Получатели Delta Sharing могут читать таблицу только в формате Delta, даже если включена функция чтения Iceberg.
- Некоторые функции таблиц Delta Lake, используемые для чтения в Iceberg, не поддерживаются некоторыми клиентами Delta Sharing. См. Что такое Delta Sharing?.
Канал изменений данных работает для клиентов Delta, когда включено чтение Iceberg, но не поддерживается для Iceberg.