Оптимизация слияния с низким уровнем перемешивания в таблицах 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.

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

  1. Scala и PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "true")
  1. SQL Spark
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = true

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

  1. Scala и PySpark
spark.conf.get("spark.microsoft.delta.merge.lowShuffle.enabled")
  1. SQL Spark
SET `spark.microsoft.delta.merge.lowShuffle.enabled`

Чтобы отключить эту функцию, измените следующую конфигурацию, как показано ниже:

  1. Scala и PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "false")
  1. SQL Spark
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = false