Поделиться через


Использование UniForm для чтения разностных таблиц с клиентами Iceberg

Универсальный формат Delta (UniForm) позволяет читать таблицы Delta с клиентами средства чтения Iceberg. Для этой функции требуется Databricks Runtime 14.3 LTS или более поздней версии.

Внимание

Документация по устаревшей функции таблицы UniForm IcebergCompatV1 см. в разделе "Устаревшая версия UniForm IcebergCompatV1".

UniForm использует преимущества того факта, что Delta Lake и Iceberg состоят из файлов данных Parquet и слоя метаданных. UniForm автоматически создает метаданные Айсберга асинхронно без перезаписи данных, чтобы клиенты Iceberg могли читать таблицы Delta, как если бы они были таблицами Iceberg. Одна копия файлов данных служит обоим форматам.

Вы можете настроить внешнее подключение, чтобы каталог Unity действовал в качестве каталога Iceberg. См. статью Read using the Unity Catalog Iceberg catalog endpoint.

UniForm использует zstd вместо snappy в качестве кодека сжатия для базовых файлов данных Parquet.

Примечание.

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

Требования

Чтобы включить UniForm, необходимо выполнить следующие требования:

Примечание.

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

Включение Delta UniForm

Внимание

Включение Delta UniForm задает функцию IcebergCompatV2таблицы Delta , функцию протокола записи. Только клиенты, поддерживающие эту функцию таблицы, могут записывать в таблицы с поддержкой UniForm. Для записи в таблицы Delta с включенной функцией необходимо использовать Databricks Runtime 14.3 LTS или более поздней версии.

Вы можете отключить UniForm, отменив настройку delta.universalFormat.enabledFormats свойства таблицы. Невозможно отключить сопоставление столбцов после его включения, а обновления до версии протокола чтения Delta Lake и записи не могут быть отменены.

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

'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'

Кроме того, необходимо включить сопоставление столбцов для использования UniForm. Эта функция включена автоматически, если включить UniForm во время создания таблицы, как показано в следующем примере:

CREATE TABLE T(c1 INT) TBLPROPERTIES(
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

Вы можете включить UniForm в существующей таблице с помощью следующего синтаксиса:

REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));

Примечание.

Этот синтаксис также работает для обновления с общедоступной предварительной версии UniForm, которая использовала функцию IcebergCompatV1таблицы.

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

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

Примечание.

Если вы планируете использовать BigQuery в качестве клиента читателя Iceberg, необходимо установить spark.databricks.delta.write.dataFilesToSubdir значение true в Azure Databricks для размещения требования BigQuery для макета данных.

См . ограничения.

Когда UniForm создает метаданные Айсберга?

Azure Databricks активирует асинхронное создание метаданных Iceberg после завершения транзакции записи Delta Lake с использованием того же вычисления, что и транзакция Delta. Вы также можете вручную активировать создание метаданных Iceberg. См. инструкцию по преобразованию метаданных Iceberg вручную.

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

Delta Lake гарантирует, что в любое время выполняется только один процесс создания метаданных Айсберга. Фиксации, которые активируют второй параллельный процесс создания метаданных Iceberg, успешно фиксируются в Delta, но они не будут запускать асинхронное создание метаданных Iceberg. Это предотвращает каскадную задержку для создания метаданных для рабочих нагрузок с частыми фиксациями (в секундах до минут между фиксациями).

См . версии таблиц Delta и Iceberg.

Проверка состояния создания метаданных Iceberg

UniForm добавляет следующие поля в каталог Unity и метаданные таблицы Iceberg для отслеживания состояния создания метаданных:

Поле метаданных Description
converted_delta_version Последняя версия таблицы Delta, для которой метаданные Iceberg были успешно созданы.
converted_delta_timestamp Метка времени последней фиксации Delta, для которой метаданные Айсберга были успешно созданы.

В Azure Databricks можно просмотреть эти поля метаданных, выполнив одно из следующих действий.

Сведения о проверке свойств таблицы за пределами 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

См. раздел "ИСПРАВЛЕНИЕ ТАБЛИЦЫ".

Чтение с помощью пути JSON метаданных

Для некоторых клиентов Iceberg требуется предоставить путь к файлам метаданных версии для регистрации внешних таблиц Iceberg. Каждый раз, когда UniForm преобразует новую версию таблицы Delta в Iceberg, он создает новый 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"
    }
}

Внимание

Для чтения текущих версий таблицы клиентам на основе пути на основе пути айсберга может потребоваться вручную обновить и обновить пути JSON метаданных. Пользователи могут столкнуться с ошибками при запросе таблиц Iceberg с использованием устаревших версий, так как файлы данных Parquet удаляются из таблицы Delta с VACUUM.

Чтение конечной точки каталога Айсберга каталога Unity

Некоторые клиенты Iceberg могут подключаться к каталогу REST Iceberg. Каталог Unity предоставляет реализацию API rest каталога Iceberg только для чтения для таблиц Delta с поддержкой UniForm с помощью конечной точки /api/2.1/unity-catalog/iceberg. Дополнительные сведения об использовании этого REST API см. в спецификации REST API айсберга.

Клиенты, известные для поддержки API каталога Iceberg, включают Apache Spark, Flink и Trino. Необходимо настроить доступ к базовому облачному хранилищу объектов, содержащего таблицу Delta с включенной функцией UniForm. Дополнительные сведения о конфигурации см. в документации для клиента средства чтения Iceberg.

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

Ниже приведен пример параметров настройки OSS Apache Spark для чтения Юниформы в качестве Айсберга:

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.unity"="org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.unity.catalog-impl": "org.apache.iceberg.rest.RESTCatalog",
"spark.sql.catalog.unity.uri": "<api-root>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.unity.token":"<your_personal_access_token>",
"spark.sql.catalog.unity.io-impl": "org.apache.iceberg.aws.s3.S3FileIO

Замените полный URL-адрес рабочей области, в которой вы создали личный маркер доступа.<api-root>

Примечание.

При запросе таблиц в каталоге Unity с помощью этого метода идентификаторы объектов используют следующий шаблон:

unity.<catalog-name>.<schema-name>.<table-name>

Этот шаблон использует те же три уровня имен, которые присутствуют в каталоге Unity, но добавляет дополнительный префикс unity.

Версии таблиц Delta и Iceberg

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

Как правило, версии таблицы Iceberg и Delta не соответствуют метке времени фиксации или идентификатору версии. Если вы хотите проверить, какая версия таблицы Delta соответствует заданной версии таблицы Айсберга, можно использовать соответствующие свойства таблицы, заданные в таблице Айсберга. См. сведения о состоянии создания метаданных Iceberg.

Ограничения

Применяются следующие ограничения:

  • UniForm не работает в таблицах с включенными векторами удаления. См. раздел " Что такое векторы удаления?".
  • Разностные таблицы с поддержкой UniForm не поддерживают VOID типы.
  • Клиенты Айсберга могут читать только из UniForm. Записи не поддерживаются.
  • Клиенты читателя Айсберга могут иметь отдельные ограничения, независимо от UniForm. См. документацию по выбранному клиенту.
  • Получатели разностного общего доступа могут считывать таблицу только как Delta, даже если включена функция UniForm.

Веб-канал изменений работает для клиентов Delta, если включен UniForm, но не поддерживается в Айсберге.

Некоторые функции таблицы Delta Lake, используемые UniForm, не поддерживаются некоторыми клиентами средства чтения Delta Sharing. Сведения о безопасном использовании разностного общего доступа см. в разделе "Общий доступ к данным и ресурсам ИИ".