Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Когда запрос соединяет большую таблицу Delta Lake с меньшей отфильтрованной таблицей, значения фильтра неизвестны до выполнения запроса. Без отсечения во время выполнения запрос сканирует каждый файл в большой таблице, даже файлы, не содержащие соответствующих строк. Динамическая очистка файлов решает эту проблему. Во время выполнения оптимизатор проталкивает результаты фильтрации с одной стороны соединения на уровень сканирования таблицы Delta Lake и пропускает файлы, которые не могут содержать совпадающие строки.
Динамическая очистка файлов включена по умолчанию. Вам не нужно менять свои запросы, чтобы получить от этого пользу.
Когда применяется динамическая очистка файлов
Динамическая обрезка файлов применяется только к операциям JOIN для таблиц Delta Lake. В MERGE выражении используются значения join key из исходного источника для пропуска целевых файлов, когда условие слияния сравнивает исходный столбец с целевым столбцом для равенства. В инструкциях UPDATE и DELETE он применяется, когда условие содержит подзапрос, выполняющий аналогичное сравнение.
Для динамического отсечения файлов в операторах MERGE, UPDATE и DELETE требуется вычислительный ресурс с поддержкой Photon. Для SELECT инструкций Photon предлагает более широкую и надёжную динамическую обрезку файлов. Без Photon динамическая обрезка файлов может применяться к SELECT инструкциям, в зависимости от формы запроса и плана выполнения. См. статью " Что такое Фотон?".
Динамическое отсечение файлов в основном повышает производительность для неразделённых таблиц и для объединений на неразделённых столбцах. По умолчанию он срабатывает только тогда, когда большая таблица Delta Lake, участвующая в соединении, составляет не менее 10 ГБ и содержит не менее 10 файлов. См. раздел Конфигурация.
Динамическая обрезка файлов также снижает конфликты при записи. Когда Delta Lake проверяет конфликты во время коммита, он учитывает файлы, которые пропустила динамическая обрезка файлов. Это снижает количество неудачных транзакций. См. уровни изоляции и конфликты записи.
Лучшие практики
Эффект динамического отсечения файлов коррелирует с тем, как данные кластеризуются. Если значения, по которым выполняется соединение, распределены по каждому файлу, динамическая фильтрация файлов пропускает лишь несколько файлов. Чтобы помочь динамической очистке пропускать больше файлов, следуйте следующим рекомендациям:
- Используйте жидкую кластеризацию столбцов, по которым вы часто выполняете JOIN, чтобы соответствующие строки находились в меньшем числе файлов.
- Используйте вычисления с поддержкой Photon, необходимые для операторов
MERGE,UPDATEиDELETEдля динамической обрезки файлов.
Конфигурация
Большинство рабочих нагрузок не нуждаются в изменении этих настроек. Рассмотрите возможность настройки порогов, если соединение с меньшей таблицей Delta Lake позволило бы выполнить отсечение, но её размер или число файлов ниже стандартного порога.
Эти свойства конфигурации Apache Spark управляют динамической фильтрацией файлов:
| Property | Type | Default | Description |
|---|---|---|---|
spark.databricks.optimizer.dynamicFilePruning |
Boolean |
true |
Включает или выключает динамическое удаление файлов. |
spark.databricks.optimizer.deltaTableSizeThreshold |
Long |
10000000000 (10 ГБ) |
Минимальный размер в байтах большой таблицы Delta Lake в соединении, которое запускает динамическую обрезку файлов. Для небольшой таблицы сканирование всей таблицы обычно дешевле, чем проталкивание фильтров вниз. Чтобы определить размер таблицы Delta Lake, выполните DESCRIBE DETAIL table_name, затем проверьте столбец sizeInBytes. |
spark.databricks.optimizer.deltaTableFilesThreshold |
Integer |
10 |
Минимальное количество файлов в большой таблице Delta Lake при соединении, которое запускает динамическое отсечение файлов. Если в таблице меньше файлов, чем этот порог, динамическое отсечение файлов не запускается, потому что для таблицы с несколькими файлами это может быть невыгодно. Чтобы найти количество файлов в таблице Delta Lake, запустите DESCRIBE DETAIL table_name и проверьте столбц numFiles . |