Управляемые таблицы Unity Catalog для Delta Lake и Apache Iceberg

Управляемые таблицы каталога Unity — это тип таблицы по умолчанию и рекомендуемый тип таблицы в Azure Databricks для Delta Lake и Apache Iceberg. Каталог Unity управляет всеми обязанностями по чтению, записи, хранению и оптимизации. См. раздел "Преобразование внешних или внешних таблиц Delta Lake" в управляемые таблицы каталога Unity.

Файлы данных для управляемых таблиц хранятся в схеме или каталоге, содержащих их. См. Укажите управляемое расположение хранилища в каталоге Unity.

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

Вы можете работать с управляемыми таблицами на всех языках и продуктах, поддерживаемых в Azure Databricks. Для создания, обновления, удаления или запроса управляемых таблиц требуются определенные привилегии. См. в каталоге Unity раздел Управление привилегиями.

Note

На этой странице описаны только управляемые таблицы каталога Unity. Для управления таблицами в устаревшем хранилище метаданных Hive см. раздел Объекты базы данных в устаревшем хранилище метаданных Hive.

Преимущества управляемых таблиц каталога Unity

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

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

Следующие возможности доступны только для управляемых таблиц в Unity Catalog и недоступны для внешних и сторонних таблиц:

Feature Benefits Конфигурация
Каталог коммитов Обеспечивает многооператорные транзакции между таблицами, более быстрое планирование запросов, обязательные изменения схем и ограничений, а также безопасные записи с внешних движков. Отключен по умолчанию. Чтобы включить, задайте свойство таблицы delta.feature.catalogManaged. См. раздел Включить коммиты каталога.
Прогнозная оптимизация Автоматически оптимизирует распределение данных и вычисления с помощью ИИ, без ручного обслуживания. Databricks рекомендует включить прогнозную оптимизацию для всех управляемых таблиц, чтобы снизить затраты на хранение и вычисления. Включено по умолчанию для аккаунтов, созданных 11 ноября 2024 года или позже. Azure Databricks постепенно поддерживает его для существующих аккаунтов. Сведения о настройке см. в разделе "Включение прогнозной оптимизации".
Многооператорные транзакции Запускайте несколько SQL-операторов в одной или нескольких таблицах как один атомарный коммит с гарантиями ACID. Все изменения либо успешно применяются одновременно, либо откатываются вместе. Используйте для хранимых процедур и SQL-скриптов. Отключен по умолчанию. Для выбора режима транзакции см. раздел «Режимы транзакций».
Записи в управляемые таблицы Apache Iceberg находятся в Private Preview.
Автоматическое кластеризация жидкости Для таблиц с предиктивной оптимизацией автоматически выбирается и обновляет ключи кластеризации по мере изменения паттернов запросов для повышения производительности и снижения затрат. Отключен по умолчанию. Сведения о настройке см. в разделе "Включение кластеризации жидкости".
Кэширование метаданных Кэширование метаданных транзакций в памяти улучшает производительность запросов, минимизируя запросы к журналу транзакций, хранящимся в облаке. Включено по умолчанию. Не настраиваемая.
Индексы полнотекстового поиска Ускоряет поиск подстрок и ключевых слов в текстовых столбцах с помощью функций search и isearch. Azure Databricks пропускает файлы, которые не могут содержать совпадающие строки, уменьшая количество отсканированных данных. Отключен по умолчанию. Создайте с помощью CREATE SEARCH INDEX.
В бета-версии. Требуется Databricks Runtime 18.2 и выше.
Автоматическое DROP TABLE удаление файлов после команды Когда вы сбрасываете управляемую таблицу, Azure Databricks удаляет файлы данных из облачного хранилища после окончания периода восстановления (по умолчанию 7 дней), снижая затраты на хранение. Для внешних таблиц необходимо вручную удалить файлы из контейнера хранилища. Включено по умолчанию. Период восстановления можно настроить на уровне каталога или схемы. См. статью "Удалить управляемую таблицу".

Доступ к данным Databricks с помощью внешних систем

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

Благодаря открытым API и предоставлению учетных данных Unity Catalog позволяет внешним движкам, таким как Trino, DuckDB, Apache Spark и Daft, а также движкам, интегрированным с каталогом Iceberg REST, таким как Dremio, получать доступ к управляемым таблицам. Для внешних клиентов, которые не поддерживают открытые API, можно использовать режим совместимости для чтения управляемых таблиц с помощью любого клиента Delta Lake или Apache Iceberg. OpenSharing, протокол открытый код, обеспечивает безопасный, управляемый обмен данными с внешними партнерами и платформами.

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

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

  • Unity REST API предоставляет клиентам Delta Lake доступ на чтение, запись и создание управляемых таблиц Delta Lake.
  • REST-каталог Iceberg (IRC) предоставляет клиентам Apache Iceberg доступ на чтение, запись и создание для управляемых таблиц Apache Iceberg, а также доступ только на чтение для таблиц Delta Lake с включённой поддержкой чтения через Apache Iceberg.

Оба API поддерживают механизм выдачи учетных данных, который предоставляет временные учетные данные с ограниченной сферой действия, наследующие привилегии запрашивающего субъекта Azure Databricks, сохраняя механизмы управления и безопасности.

OpenSharing — это протокол открытый код, который обеспечивает безопасный и управляемый доступ к внешним партнерам и платформам. OpenSharing можно использовать для предоставления партнерам временного доступа только для чтения.

Все операции чтения и записи в управляемые таблицы должны использовать имена таблиц, каталогов и схем, при наличии. Например: catalog_name.schema_name.table_name. Доступ на основе пути к управляемым таблицам каталога Unity не поддерживается (за исключением режима совместимости), так как он обходит элементы управления доступом каталога Unity и мешает правильному функционированию функций управляемых таблиц.

Создание управляемой таблицы

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

  • USE SCHEMA в родительской схеме таблицы.
  • USE CATALOG в родительском каталоге таблицы.
  • CREATE TABLE в родительской схеме таблицы.

Используйте следующий синтаксис, чтобы создать пустую управляемую таблицу. Замените значения заполнителей:

  • <catalog-name>: имя каталога, содержащего таблицу.
  • <schema-name>: имя схемы, содержащей таблицу.
  • <table-name>: это имя для таблицы.
  • <column-specification>: имя и тип данных каждого столбца.

SQL

-- Create a managed Delta table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
  <column-specification>
);

-- Create a managed Iceberg table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
  <column-specification>
)
USING iceberg;

Python

Создание управляемой таблицы Delta Lake с помощью saveAsTable():

from pyspark.sql.types import StructType, StructField, StringType

schema = StructType([StructField("<column-name>", StringType())])

spark.createDataFrame([], schema).write \
  .saveAsTable("<catalog-name>.<schema-name>.<table-name>")

В качестве альтернативы используйте API DeltaTableBuilder для параметров, специфичных для Delta, таких как вычисляемые столбцы и свойства таблицы:

from delta.tables import DeltaTable

DeltaTable.create(spark) \
  .tableName("<catalog-name>.<schema-name>.<table-name>") \
  .addColumn("<column-name>", "<data-type>") \
  .property("<key>", "<value>") \
  .execute()

Создайте управляемую таблицу Apache Iceberg:

from pyspark.sql.types import StructType, StructField, StringType

schema = StructType([StructField("<column-name>", StringType())])

spark.createDataFrame([], schema).write \
  .format("iceberg") \
  .saveAsTable("<catalog-name>.<schema-name>.<table-name>")

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

Note

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

Управляемые таблицы можно создавать из результатов запроса или операций записи DataFrame. В следующих статьях демонстрируется несколько шаблонов, которые можно использовать для создания управляемой таблицы в Azure Databricks:

Чтобы создать копию существующей управляемой таблицы, используйте клон. Управляемые таблицы Delta Lake поддерживают глубокое и поверхностное клонирование. Управляемые таблицы Apache Iceberg поддерживают только глубокое клонирование. См. Клонирование таблицы в Azure Databricks и Клонирование управляемой таблицы Iceberg.

Удалите управляемую таблицу

Чтобы удалить управляемую таблицу, необходимо:

  • MANAGE на столе или ты должен быть владельцем стола.
  • USE SCHEMA в родительской схеме таблицы.
  • USE CATALOG в родительском каталоге таблицы.

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

SQL

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

Python

spark.sql("DROP TABLE IF EXISTS catalog_name.schema_name.table_name")

Кроме того, в Databricks Runtime 18.2 и более поздних версиях используйте spark.catalog.dropTable():

spark.catalog.dropTable("catalog_name.schema_name.table_name", ifExists=True)

Каталог Unity поддерживает UNDROP TABLE команду для восстановления случайно удаленных управляемых таблиц. По умолчанию таблицы можно восстановить в течение 7 дней после удаления. После окончания периода восстановления Azure Databricks удаляет базовые файлы данных из вашего облачного клиента в течение 48 часов.

Настройка периода восстановления

Important

Настраиваемый период восстановления находится в общедоступной предварительной версии.

Можно настроить, как долго удаленные управляемые таблицы можно восстанавливать на уровне каталога или схемы. Если периоды восстановления задаются на обоих уровнях, параметр уровня схемы имеет приоритет для таблиц в этой схеме.

Чтобы настроить период восстановления, необходимо иметь MANAGE привилегии или права владения в каталоге или схеме. Этот параметр применяется только к таблицам, удаленным после настройки. Это не влияет на таблицы, которые уже удалены.

Период восстановления может составлять 0 часов, что отключает восстановление, или от 7 до 30 дней. Более длительный период защищает от случайных потерь критически важных данных, а короткий — удаляет их быстрее, чтобы сэкономить затраты на хранение в ETL-конвейерах, которые часто создают и сбрасывают таблицы. Если задано значение 0, удалённые таблицы нельзя восстановить с помощью UNDROP. Azure Databricks удаляет файлы данных из облачного хранилища в течение 48 часов после сброса.

Чтобы задать период восстановления, используйте ALTER CATALOG или ALTER SCHEMA с предложением RETAIN DROPPED TO:

SQL

-- Set a 30-day recovery period on a catalog
ALTER CATALOG my_catalog RETAIN DROPPED TO 30 DAYS;

-- Set a 7-day recovery period on a schema (overrides the catalog setting)
ALTER SCHEMA my_catalog.my_schema RETAIN DROPPED TO 7 DAYS;

Python

spark.sql("ALTER CATALOG my_catalog RETAIN DROPPED TO 30 DAYS")
spark.sql("ALTER SCHEMA my_catalog.my_schema RETAIN DROPPED TO 7 DAYS")

Можно также задать период восстановления при создании каталога или схемы с предложением RETAIN DROPPED FOR :

SQL

CREATE CATALOG my_catalog RETAIN DROPPED FOR 30 DAYS;
CREATE SCHEMA my_catalog.my_schema RETAIN DROPPED FOR 7 DAYS;

Python

spark.sql("CREATE CATALOG my_catalog RETAIN DROPPED FOR 30 DAYS")
spark.sql("CREATE SCHEMA my_catalog.my_schema RETAIN DROPPED FOR 7 DAYS")

Чтобы проверить текущий период восстановления, выполните команду DESCRIBE EXTENDED. Вывод включает строку Recovery Period Hours:

SQL

DESCRIBE CATALOG EXTENDED my_catalog;
DESCRIBE SCHEMA EXTENDED my_catalog.my_schema;

Python

spark.sql("DESCRIBE CATALOG EXTENDED my_catalog").show()
spark.sql("DESCRIBE SCHEMA EXTENDED my_catalog.my_schema").show()