Чтение таблиц Delta с помощью клиентов Iceberg
В этой статье содержатся сведения о включении чтения с использованием формата Iceberg для таблиц, хранящихся в Delta Lake в Azure Databricks. Для этой функции требуется Databricks Runtime 14.3 LTS или более поздней версии.
Примечание.
Эта функция ранее называлась Delta Lake Universal Format (UniForm).
Вы можете настроить внешнее подключение, чтобы каталог Unity действовал в качестве каталога Iceberg. См. Чтение таблиц Databricks клиентами Iceberg.
Как работает Iceberg (UniForm)?
Delta Lake и Iceberg состоят из файлов данных Parquet и слоя метаданных. Включение чтения Iceberg настраивает ваши таблицы для автоматического создания метаданных Iceberg асинхронно, без изменения данных, чтобы клиенты Iceberg могли читать таблицы Delta, управляемые Azure Databricks. Одна копия файлов данных обслуживает несколько форматов.
Внимание
- Таблицы с включенной поддержкой чтения Iceberg используют Zstandard вместо Snappy в качестве кодека сжатия для базовых файлов данных Parquet.
- Создание метаданных Айсберга выполняется асинхронно на вычислительных ресурсах, используемых для записи данных в таблицы Delta, что может увеличить использование ресурсов драйвера.
- Для документации по устаревшей функции таблицы UniForm
IcebergCompatV1
смотрите раздел UniForm IcebergCompatV1в устаревшей версии.
Требования
Чтобы включить чтение Айсберга, необходимо выполнить следующие требования:
- Таблица Delta должна быть зарегистрирована в каталоге Unity. Поддерживаются как управляемые, так и внешние таблицы.
- Таблица должна иметь включенное сопоставление столбцов. См. Переименуйте и удалите столбцы с сопоставлением столбцов Delta Lake.
- Таблица Delta должна иметь
minReaderVersion
>= 2 иminWriterVersion
>= 7. См. статью Как Azure Databricks управляет совместимостью функций Delta Lake?. - Записи в таблицу должны использовать Databricks Runtime 14.3 LTS или более поздней версии.
Примечание.
Вы не можете включить векторы удаления в таблице, для которой активирован режим чтения Iceberg.
Используйте REORG
для отключения и очистки векторов удаления при включении чтения с использованием Iceberg в существующей таблице с включенными векторами удаления. См. раздел о включении или обновлении поддержки чтения Iceberg с помощью REORG.
Включение операций чтения Iceberg (UniForm)
Внимание
При включении чтения с использованием Iceberg в таблицу добавляется функция протокола записи IcebergCompatV2
. Только клиенты, поддерживающие табличную функцию, могут записывать в таблицы с включённой поддержкой чтения Iceberg. В Azure Databricks необходимо использовать Databricks Runtime 14.3 LTS или более поздней версии для записи в включенные таблицы.
Вы можете отключить считывание 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 для отслеживания состояния создания метаданных:
Поле метаданных | Description |
---|---|
converted_delta_version |
Последняя версия таблицы Delta, для которой метаданные Iceberg были успешно созданы. |
converted_delta_timestamp |
Метка времени последней фиксации Delta, для которой метаданные Айсберга были успешно созданы. |
В 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 не работают с таблицами с включенными векторами удаления. См. раздел " Что такое векторы удаления?".
- Таблицы Delta с активированным чтением Iceberg не поддерживают типы
VOID
. - Поддержка клиента Iceberg доступна только для чтения. Записи не поддерживаются.
- Клиенты читателя Iceberg могут иметь отдельные ограничения, независимо от поддержки Azure Databricks для операций чтения Iceberg. См. документацию для выбранного клиента.
- Получатели Delta Sharing могут читать таблицу только в формате Delta, даже если включена функция чтения Iceberg.
- Некоторые функции таблиц Delta Lake, используемые для чтения в Iceberg, не поддерживаются некоторыми клиентами Delta Sharing. См. раздел "Что такое разностный общий доступ?".
Канал изменений данных работает для клиентов Delta, когда включено чтение Iceberg, но не поддерживается для Iceberg.