Partekatu honen bidez:


Optimización de combinación aleatoria baja en tablas Delta

El comando MERGE de Data Lake permite a los usuarios actualizar una tabla delta con condiciones avanzadas. Puede actualizar datos de una tabla de origen, una vista o un DataFrame en una tabla de destino mediante el comando MERGE. Sin embargo, el algoritmo actual no está totalmente optimizado para controlar filas sin modificar. Con la optimización de combinación aleatoria baja, las filas sin modificar se excluirán de operaciones de orden aleatorio costosas que se necesiten para actualizar las filas coincidentes.

Por qué necesitamos la combinación aleatoria baja

Actualmente, la operación MERGE se realiza mediante dos ejecuciones de combinación. La primera combinación usa toda la tabla de destino y los datos de origen para buscar una lista de archivos táctiles de la tabla de destino, incluyendo las filas coincidentes. Después, realizará la segunda combinación leyendo solo los archivos táctiles y los datos de origen para realizar la actualización real de la tabla. Aunque la primera combinación sea reducir la cantidad de datos de la segunda combinación, todavía podría haber un gran número de filas sin modificar en los archivos táctiles. La primera consulta de combinación es más ligera, ya que solo leerá columnas en la condición de coincidencia dada. La segunda para la actualización de tabla debe cargar todas las columnas, lo que incurrirá en un proceso de orden aleatorio costoso.

Con la optimización de combinación aleatoria baja, Delta mantendrá el resultado de fila coincidente de la primera combinación temporalmente y lo utilizará para la segunda combinación. En función del resultado, excluirá las filas no modificadas del proceso de orden aleatorio pesado. Habría dos trabajos de escritura independientes para las filas coincidentes y las filas sin modificar, por lo que podría dar lugar a un número 2x de archivos de salida en comparación con el comportamiento anterior. Sin embargo, el rendimiento esperado supera el posible problema de archivos pequeños.

Disponibilidad

Nota

  • La combinación de orden aleatorio bajo está disponible como una característica en versión preliminar.

Está disponible en grupos de Synapse para las versiones de Apache Spark 3.2 y 3.3.

Versión Disponibilidad Valor predeterminado
Delta 0.6/Spark 2.4 No -
Delta 1.2/Spark 3.2 false
Delta 2.2 / Spark 3.3 true

Ventajas de la combinación aleatoria baja

  • Las filas no modificadas en los archivos táctiles se controlarán por separado y no pasarán por la operación MERGE real. Puede ahorrar el tiempo de ejecución general de MERGE y los recursos de proceso. La ganancia sería mayor cuando se copiasen muchas filas y solo se actualizaran algunas filas.
  • Los órdenes de filas se conservan para las filas sin modificar. Por lo tanto, los archivos de salida de filas sin modificar aún podrían ser eficaces para omitir datos si el archivo se ordenó o se ordenó con la Z.
  • Habría una sobrecarga pequeña incluso para el peor de los casos cuando la condición MERGE coincida con todas las filas de los archivos táctiles.

Cómo habilitar y deshabilitar la combinación de orden aleatorio bajo

Una vez establecida la configuración para el grupo o la sesión, todos los patrones de escritura de Spark usarán la funcionalidad.

Para usar la Optimización de combinación aleatoria baja, habilítela con la siguiente configuración:

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

Para comprobar el valor de configuración actual, use el comando como se muestra a continuación:

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

Para deshabilitar la característica, cambie la siguiente configuración, tal y como se muestra a continuación:

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