Что такое Apache Iceberg в Azure Databricks?

Important

Таблицы Iceberg, управляемые каталогом Unity, доступны в общедоступной предварительной версии в Databricks Runtime 16.4 LTS и выше. Внешние таблицы Iceberg также находятся в общедоступной предварительной версии в Databricks Runtime 16.4 LTS и выше.

Функции Iceberg версии 3 доступны в общедоступной предварительной версии в Databricks Runtime 18.0 и более поздних версий. Ознакомьтесь с функциями Apache Iceberg версии 3.

Apache Iceberg — это формат таблицы с открытым исходным кодом для рабочих нагрузок аналитики. Она поддерживает такие функции, как эволюция схемы, перемещение по времени и скрытая секционирование. Как и Delta Lake, Айсберг предоставляет уровень абстракции, который позволяет выполнять транзакции ACID для данных, хранящихся в хранилище объектов. Azure Databricks поддерживает таблицы Iceberg, использующие формат файла Apache Parquet. Айсберг поддерживает атомарность и согласованность, записывая новые файлы метаданных для каждого изменения таблицы.

Каталог Айсберга — это слой верхнего уровня архитектуры таблицы Айсберга. Она обрабатывает такие операции, как создание, удаление и переименование таблиц. Основная ответственность заключается в предоставлении текущих метаданных при загрузке таблицы. Azure Databricks поддерживает таблицы Iceberg, управляемые следующими:

Все таблицы Iceberg в Azure Databricks следуют открытой спецификации формата Iceberg. См. спецификацию таблицы Iceberg.

Создание таблиц Iceberg в каталоге Unity

Таблицы Iceberg, созданные в каталоге Unity, управляются таблицами Iceberg. Эти таблицы можно создать с помощью следующих средств:

Управляемые таблицы Iceberg полностью интегрированы с функциями платформы Azure Databricks. Каталог Unity управляет задачами жизненного цикла, такими как срок действия моментального снимка и сжатие файлов в этих таблицах. Управляемые таблицы Iceberg также поддерживают кластеризацию жидкости, что повышает производительность запросов. Прогнозная оптимизация автоматизирует эти задачи для снижения затрат на хранение и повышения скорости запросов. Databricks рекомендует использовать клиенты Iceberg 1.9.2 и выше для чтения и записи в каталог Unity.

Читать таблицы Айсберга, управляемые другими каталогами

Иностранная таблица Айсберга — это таблица Айсберга, управляемая каталогом за пределами каталога Unity. Внешний каталог сохраняет текущие метаданные таблицы. Azure Databricks использует Lakehouse Federation для получения метаданных и чтения таблицы из хранилища объектов.

Таблицы Foreign Iceberg доступны только для чтения в Azure Databricks и имеют ограниченную поддержку платформы.

Доступ к таблицам Айсберга с помощью внешних систем

Доступ ко всем таблицам Iceberg в каталоге Unity можно получить с помощью API REST каталога Iceberg. Этот открытый API поддерживает операции чтения и записи из внешних движков Iceberg на разных языках и платформах. См. Как подключаться к таблицам Azure Databricks из клиентов Apache Iceberg.

Каталог REST поддерживает отправку учетных данных, которая предоставляет временные учетные данные внешним обработчикам для доступа к базовому хранилищу. Дополнительные сведения см. в разделе Credential Vending в Unity Catalog для доступа к внешним системам.

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

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

Эволюция разделов

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

Замечание

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

Чтобы настроить внешний доступ, см. раздел Доступ к таблицам Azure Databricks из клиентов Apache Iceberg.

В следующих примерах показано, как использовать эволюцию секций с помощью Spark SQL и расширения Iceberg. Синтаксис эволюции секций Apache Iceberg и поддерживаемые преобразования см. в статье Apache Iceberg Spark DDL.

Добавить поле раздела

Чтобы добавить новое поле раздела в существующую таблицу:

ALTER TABLE catalog.schema.table ADD PARTITION FIELD column_name;

Удалить поле раздела

Чтобы удалить существующее поле секции из таблицы, выполните следующее:

ALTER TABLE catalog.schema.table DROP PARTITION FIELD column_name;

Заменить поле раздела

Чтобы заменить одно поле раздела на другое без промежуточного переразбиения:

ALTER TABLE catalog.schema.table REPLACE PARTITION FIELD old_column WITH new_column;

Ограничения таблицы Айсберга

Следующие ограничения применяются к таблицам Айсберга в Azure Databricks и могут быть изменены.

  • Таблицы Iceberg поддерживают только формат файла Apache Parquet.
  • Azure Databricks поддерживает версии 1, 2 и 3 спецификации Iceberg.
  • Удаление по позиции в Айсберге версии 2 и удаление на основе равенства не поддерживаются. Вместо этого Azure Databricks поддерживает векторы удаления Iceberg версии 3 для удаления на уровне строк.
  • Создание веток и тегирование не поддерживаются. Только основная ветвь доступна при чтении внешних таблиц Iceberg.
  • Разбиение:
    • Эволюция секций поддерживается только в управляемых таблицах Iceberg, когда происходит взаимодействие со сторонними системами Iceberg.
    • Внешние таблицы Iceberg не поддерживают эволюцию разделов.
    • Секционирование по BINARY типу не поддерживается.
  • Представления не поддерживаются.
  • Следующие типы данных не поддерживаются:
    • UUID
    • Fixed(L)
    • TIME
    • Вложенные STRUCT с обязательными полями

Ограничения для управляемых таблиц Iceberg

Следующие ограничения применяются специально к управляемым таблицам Айсберга:

  • Векторный поиск не поддерживается.
  • Айсберг не поддерживает канал передачи изменений данных. В результате добавочная обработка не поддерживается при чтении управляемых таблиц Iceberg в качестве источника:
    • Материализованные представления и потоковые таблицы
    • Профилирование данных
    • Онлайн-таблицы
    • Lakebase
    • Классификация данных
  • Управляемые таблицы Iceberg можно создавать только в том случае, если для обслуживания таблиц включена прогнозная оптимизация .
  • Следующие свойства таблицы управляются каталогом Unity и не могут быть заданы вручную.
    • write.location-provider.impl
    • write.data.path
    • write.metadata.path
    • write.format.default
    • write.delete.format.default
  • Кодек сжатия для изменения сжатия таблицы не поддерживается. Все таблицы используют Zstd по умолчанию.
  • Секционирование по выражениям (например, years(), months(), days(), hours(), ) bucket()не поддерживается.
  • Функции, не поддерживаемые в Apache Iceberg, также недоступны для управляемых таблиц Iceberg. К ним относятся генерируемые столбцы Delta Lake, ограничения на Azure Databricks и поддержка сортировки для Delta Lake.

Ограничения таблицы Foreign Iceberg

Следующие ограничения применяются специально к иностранным таблицам Айсберга:

  • Перемещение по времени поддерживается только для моментальных снимков Iceberg, которые ранее были прочитаны в Azure Databricks (то есть моментальные снимки, в которых выполнялась инструкция SELECT).
  • Использование функций преобразования контейнеров для секционирования Iceberg может снизить производительность запросов при использовании условных фильтров.
  • Облачные продукты уровня хранилища, такие как Amazon S3, не интегрированы с иностранными таблицами Iceberg. Доступ к внешним таблицам Iceberg в Azure Databricks может восстановить данные, архивированные в более экономичных уровнях хранения.
  • Для кластеров выделенного режима доступа операции чтения и REFRESH FOREIGN TABLE на таблицах Айсберг требуют ALL PRIVILEGES.