Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El comando DELTA Lake MERGE permite a los usuarios actualizar una tabla delta con condiciones avanzadas. Puede actualizar datos de una tabla de origen, ver o DataFrame en una tabla de destino mediante el comando MERGE. Sin embargo, el algoritmo actual no está totalmente optimizado para controlar las filas sin modificar . Con la optimización de mezcla de orden aleatorio bajo, las filas sin modificar se excluyen de una operación de orden aleatorio costosa necesaria para actualizar las filas coincidentes.
¿Por qué necesitamos mezcla de orden aleatorio bajo?
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, incluidas las filas coincidentes. Después de eso, realiza 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 es 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 lee columnas en la condición de coincidencia especificada. La segunda para la actualización de tabla debe cargar todas las columnas, lo que supone un proceso de orden aleatorio costoso.
Con la optimización de mezcla de orden aleatorio bajo, Delta mantiene el resultado de la fila coincidente de la primera combinación temporalmente y la utiliza para la segunda combinación. En función del resultado, excluye las filas sin modificar 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, la ganancia de rendimiento esperada 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 apache Spark versiones 3.4 y 3.5.
Versión | Disponibilidad | Predeterminado |
---|---|---|
Delta 2.4/ Spark 3.4 | Sí | cierto |
Delta 3.2/ Spark 3.5 | Sí | cierto |
Ventajas de la combinación de orden aleatorio bajo
- Las filas no modificadas en los archivos táctiles se controlan por separado y no pasan por la operación MERGE real. Puede ahorrar el tiempo total de ejecución de MERGE y los recursos de proceso. La ganancia sería mayor cuando se copian muchas filas y solo se actualizan algunas filas.
- Las ordenaciones de fila se conservan para las filas sin modificar. Por lo tanto, los archivos de salida de filas sin modificar podrían ser eficaces para omitir datos si el archivo se ordenó o Z-ORDERED.
- Habría una sobrecarga pequeña incluso para el peor de los casos cuando la condición MERGE coincide 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 mezcla de orden aleatorio bajo, habilite mediante la siguiente configuración:
- Scala y PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "true")
- 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:
- Scala y PySpark
spark.conf.get("spark.microsoft.delta.merge.lowShuffle.enabled")
- Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled`
Para deshabilitar la característica, cambie la siguiente configuración, como se muestra a continuación:
- Scala y PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "false")
- Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = false