Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Управляемые таблицы каталога 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()