Обнаружение секций для внешних таблиц
В этой статье описывается стратегия обнаружения секций по умолчанию для внешних таблиц каталога Unity и необязательный параметр для включения журнала метаданных секции, который делает обнаружение секций согласованным с хранилищем метаданных Hive.
Databricks рекомендует включить ведение журнала метаданных секций для повышения скорости чтения и производительности запросов для внешних таблиц каталога Unity с секциями.
Что такое стратегия обнаружения секций по умолчанию для каталога Unity?
По умолчанию каталог Unity рекурсивно перечисляет все каталоги в расположении таблицы для автоматического обнаружения секций. Для больших таблиц с большим количеством каталогов секционирования это может увеличить задержку для многих операций таблицы.
Использование ведения журнала метаданных секции
Внимание
Эта функция предоставляется в режиме общедоступной предварительной версии.
В Databricks Runtime 13.3 LTS и более поздних версиях можно включить ведение журнала метаданных секций, которое является стратегией обнаружения секций для внешних таблиц, зарегистрированных в каталоге Unity. Это поведение соответствует стратегии обнаружения секций, используемой в хранилище метаданных Hive. Это поведение влияет только на внешние таблицы каталога Unity, которые имеют секции и используют Parquet, ORC, CSV или JSON. Databricks рекомендует включить новое поведение для повышения скорости чтения и производительности запросов для этих таблиц.
Внимание
Таблицы с включенным ведением журнала метаданных секций демонстрируют изменение поведения для обнаружения секций. Вместо автоматического сканирования расположения таблицы для секций каталог Unity учитывает только секции, зарегистрированные в метаданных секций. См . сведения о добавлении, удалении или восстановлении метаданных секции вручную.
Это поведение станет значением по умолчанию в будущей версии Databricks Runtime. Таблицы с включенной функцией можно читать или записывать только с помощью Databricks Runtime 13.3 LTS и более поздних версий.
Примечание.
Необходимо попытаться запросить таблицу с Databricks Runtime 12.2 LTS или ниже, чтобы убедиться, что она не использует новое поведение журнала секций.
Включение ведения журнала метаданных секции
Чтобы включить ведение журнала метаданных секций в таблице, необходимо включить конференц-связь Spark для текущей службы SparkSession, а затем создать внешнюю таблицу. Этот параметр необходим только в SparkSession, который создает таблицу. После создания таблицы с включенным ведением журнала метаданных секций этот параметр сохраняется как часть метаданных таблицы и использует эту функцию во всех последующих рабочих нагрузках.
В следующем синтаксисе показано использование SQL для задания конференц-связи Spark в записной книжке. При настройке вычислений можно также задать конфигурации Spark.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Внимание
Таблицы можно считывать и записывать только с помощью ведения журнала метаданных секций в Databricks Runtime 13.3 LTS и выше. Если у вас есть рабочие нагрузки, которые выполняются в Databricks Runtime 12.2 LTS или ниже, которые должны взаимодействовать с таблицами, не используйте этот параметр.
Внешние таблицы не удаляют базовые файлы данных при их удалении. Databricks рекомендует использовать CREATE OR REPLACE
синтаксис для обновления таблиц для использования ведения журнала метаданных секций, как показано в следующем примере:
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Каталог Unity применяет правила для перекрывающихся путей для таблиц и томов. Нельзя зарегистрировать новую таблицу каталога Unity в коллекции файлов данных, если таблица уже существует в этом расположении.
Работа с таблицами с метаданными секции
Databricks рекомендует использовать имена таблиц во всех операциях чтения и записи для всех таблиц, зарегистрированных в каталоге Unity. Для таблиц с метаданными секций это гарантирует, что новые секции, добавленные в реестр таблицы в каталог Unity, и запросы к таблице считывают все зарегистрированные секции.
Использование шаблонов на основе пути для операций чтения или записи может привести к игнорируемым секциям или не зарегистрированным в хранилище метаданных каталога Unity. См . ограничения.
Перечисление секций
Используйте следующую команду, чтобы отобразить все секции, зарегистрированные в каталоге Unity, в качестве метаданных секций:
SHOW PARTITIONS <table-name>
Чтобы проверить, зарегистрирована ли одна секция в каталоге Unity, используйте следующую команду:
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
Добавление, удаление или восстановление метаданных секции вручную
Каталог Unity требует, чтобы все секции для внешних таблиц содержали в каталоге, зарегистрированном с помощью LOCATION
предложения во время регистрации таблицы.
При включении метаданных секций автоматическое обнаружение секций в расположении таблицы отключено. Если внешние системы записывают данные в расположение таблицы или используют записи на основе пути для добавления или перезаписи записей в таблице, необходимо вручную восстановить метаданные секции.
Azure Databricks использует секционирование в стиле Hive для хранения таблиц, поддерживаемых Parquet, ORC, CSV и JSON. Секции в стиле Hive содержат пары "ключ-значение", подключенные с помощью равного входа в каталог секции, например year=2021/month=01/
.
Если в таблице используется секционирование в стиле Hive, можно использовать MSCK REPAIR
для синхронизации метаданных секций в каталоге Unity с секциями, существующими в расположении таблицы. В следующих примерах синтаксиса показаны распространенные операции:
-- Add and remove parition metadata to match directories in table location
MSCK REPAIR TABLE <table_name> SYNC PARTITIONS;
-- Add partitions in the table location that are not registered as partition metadata
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;
-- Drop partitions registered as partition metadata that are not in the table location
MSCK REPAIR TABLE <table_name> DROP PARTITIONS;
См. раздел "ИСПРАВЛЕНИЕ ТАБЛИЦЫ".
Вручную укажите пути для других типов секций
Если таблица не использует секционирование в стиле Hive, необходимо вручную указать расположения секций при добавлении секций. Указание секций вручную также может снизить задержку по сравнению с MSCK REPAIR
синтаксисом, особенно для таблиц с большим количеством секций. В следующем примере синтаксиса показано добавление раздела:
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
Вы также можете использовать ALTER TABLE
синтаксис для удаления, переименования, восстановления и задания расположений для секций. См. инструкции ALTER TABLE ... СЕКЦИОНИРОВАНИЕ.
Отключение новых метаданных секций
Приложение Spark, которое определяет, будут ли новые таблицы использовать метаданные секции по умолчанию. Это поведение также можно отключить явным образом. Следующий синтаксис использует SQL для отключения конференц-связи Spark:
SET spark.databricks.nonDelta.partitionLog.enabled = false;
Это определяет, используются ли только таблицы, созданные в SparkSession, метаданными секций. Чтобы отключить метаданные секции в таблице, которая использует поведение, необходимо удалить и повторно создать таблицу в SparkSession, которая не включает conf Spark.
Примечание.
Хотя вы не можете читать или записывать в таблицы с метаданными секций, включенными в Databricks Runtime 12.2 LTS или ниже, вы можете выполнять DROP
или CREATE OR REPLACE TABLE
выполнять инструкции в этих таблицах, если у вас есть достаточные привилегии в каталоге Unity.
Ограничения
Применяются следующие ограничения:
- Нельзя читать или записывать в таблицы с метаданными секции, включенными с помощью Databricks Runtime 12.2 LTS или ниже.
- Чтение таблицы с помощью пути к каталогу возвращает все секции, включая все, которые были добавлены или удалены вручную.
- Если вы вставляете или перезаписываете записи в таблицу, используя путь вместо имени таблицы, метаданные секции не записываются.
- Формат файла Avro не поддерживается.