Оптимизация слияния с низким уровнем перемешивания в таблицах Delta
Команда Delta Lake MERGE позволяет пользователям обновлять разностную таблицу с расширенными условиями. Он может обновлять данные из исходной таблицы, представления или кадра данных в целевую таблицу с помощью команды MERGE. Однако текущий алгоритм не полностью оптимизирован для обработки неизмененных строк. При оптимизации слияния с низким перемешиванием неизмененные строки исключаются из дорогостоящей операции перетасовки, необходимой для обновления сопоставленных строк.
Почему нам нужен низкий перетасовка слиянием
В настоящее время операция MERGE выполняется двумя выполнениями соединения. Первое соединение использует всю целевую таблицу и исходные данные, чтобы найти список касаемых файлов целевой таблицы, включая все соответствующие строки. После этого он выполняет второе соединение, считывая только те затронутые файлы и исходные данные, чтобы выполнить фактическое обновление таблицы. Несмотря на то, что первое соединение заключается в уменьшении объема данных для второго соединения, все равно может быть огромное количество неизмененных строк в касаемых файлах. Первый запрос соединения легче, так как он считывает только столбцы в заданном условии сопоставления. Второй для обновления таблицы необходимо загрузить все столбцы, что приводит к дорогостоящим процессам перетасовки.
При оптимизации слияния low Shuffle Delta сохраняет соответствующий результат строки из первого соединения временно и использует его для второго соединения. В зависимости от результата он исключает неизмененные строки из тяжелого процесса перетасовки. Существует два отдельных задания записи для сопоставленных строк и неизмененных строк, поэтому это может привести к 2x количества выходных файлов по сравнению с предыдущим поведением. Однако ожидаемая производительность перевешивает возможные проблемы с небольшими файлами.
Доступность
Примечание.
- Низкое слияние shuffle доступно в качестве функции предварительной версии.
Он доступен в пулах Synapse для Apache Spark версии 3.2 и 3.3.
Версия | Доступность | По умолчанию |
---|---|---|
Delta 0.6 / Spark 2.4 | Нет | - |
Delta 1.2 / Spark 3.2 | Да | false |
Delta 2.2 / Spark 3.3 | Да | true |
Преимущества низкой перетасовки слияния
- Неизмененные строки в касаемых файлах обрабатываются отдельно и не проходят фактическую операцию MERGE. Это может сэкономить общее время выполнения MERGE и вычислительные ресурсы. Увеличение будет больше, когда копируются многие строки и обновляются только несколько строк.
- Порядок строк сохраняется для неизмененных строк. Таким образом, выходные файлы неизмененных строк могут быть по-прежнему эффективными для пропуска данных, если файл был отсортирован или Z-УПОРЯДОЧЕН.
- Там было бы крошечные издержки даже в худшем случае, когда условие MERGE соответствует всем строкам в касаемых файлах.
Включение и отключение слияния low Shuffle
После настройки параметров для пула или сеанса эта функция применяется для всех шаблонов записи Spark.
Чтобы использовать оптимизацию низкой перетасовки слиянием, включите ее с помощью следующей конфигурации:
- Scala и PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "true")
- SQL Spark
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = true
Чтобы проверить текущее значение параметра, используйте следующую команду:
- Scala и PySpark
spark.conf.get("spark.microsoft.delta.merge.lowShuffle.enabled")
- SQL Spark
SET `spark.microsoft.delta.merge.lowShuffle.enabled`
Чтобы отключить эту функцию, измените следующую конфигурацию, как показано ниже:
- Scala и PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "false")
- SQL Spark
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = false