Combinación en (Delta Lake en Azure Databricks)

Combine un conjunto de actualizaciones, inserciones y eliminaciones basadas en una tabla de origen en una tabla delta de destino.

MERGE INTO [db_name.]target_table [AS target_alias]
USING [db_name.]source_table [<time_travel_version>] [AS source_alias]
ON <merge_condition>
[ WHEN MATCHED [ AND <condition> ] THEN <matched_action> ]
[ WHEN MATCHED [ AND <condition> ] THEN <matched_action> ]
[ WHEN NOT MATCHED [ AND <condition> ]  THEN <not_matched_action> ]

where

<matched_action>  =
  DELETE  |
  UPDATE SET *  |
  UPDATE SET column1 = value1 [, column2 = value2 ...]

<not_matched_action>  =
  INSERT *  |
  INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...])

<time_travel_version>  =
  TIMESTAMP AS OF timestamp_expression |
  VERSION AS OF version
  • En Databricks Runtime 5.5 LTS y 6.x, puede tener como máximo 2 cláusulas y como máximo MERGE WHEN MATCHED 1 WHEN NOT MATCHED cláusula.
  • WHEN MATCHED Las cláusulas se ejecutan cuando una fila de origen coincide con una fila de tabla de destino en función de la condición de coincidencia. Estas cláusulas tienen la semántica siguiente.
    • WHEN MATCHED Las cláusulas pueden tener como máximo una UPDATE acción on y DELETE . La UPDATE acción de solo actualiza las columnas merge especificadas de la fila de destino coincidente. La DELETE acción eliminará la fila coincidente.
    • Cada WHEN MATCHED cláusula puede tener una condición opcional. Si esta condición de cláusula existe, la acción o se ejecuta para cualquier fila de par de filas de origen-destino que coincida solo cuando la condición de UPDATE DELETE cláusula es true.
    • Si hay varias cláusulas, se evalúan en orden de especificación WHEN MATCHED (es decir, el orden de las cláusulas importa). Todas WHEN MATCHED las cláusulas, excepto la última, deben tener condiciones.
    • Si ambas cláusulas tienen condiciones y ninguna de las condiciones se cumple para un par de filas de origen-destino coincidente, la fila de destino coincidente se WHEN MATCHED deja sin cambios.
    • Para actualizar todas las columnas de la tabla Delta de destino con las columnas correspondientes del conjunto de datos de origen, use UPDATE SET * . Esto es equivalente a UPDATE SET col1 = source.col1 [, col2 = source.col2 ...] para todas las columnas de la tabla Delta de destino. Por lo tanto, esta acción supone que la tabla de origen tiene las mismas columnas que las de la tabla de destino; de lo contrario, la consulta producirá un error de análisis.
  • WHEN NOT MATCHED Las cláusulas se ejecutan cuando una fila de origen no coincide con ninguna fila de destino en función de la condición de coincidencia. Estas cláusulas tienen la semántica siguiente.
    • WHEN NOT MATCHED Las cláusulas solo pueden tener la INSERT acción . La nueva fila se genera en función de la columna especificada y las expresiones correspondientes. No es necesario especificar todas las columnas de la tabla de destino. Para las columnas de destino no especificadas, NULL se insertará .

      Nota

      En Databricks Runtime 6.5 y adicionales, debe proporcionar todas las columnas de la tabla de destino para la INSERT acción.

    • Cada WHEN NOT MATCHED cláusula puede tener una condición opcional. Si la condición de cláusula está presente, solo se inserta una fila de origen si esa condición es verdadera para esa fila. De lo contrario, se omite la columna de origen.

    • Si hay varias cláusulas, se evalúan en orden de especificación WHEN NOT MATCHED (es decir, el orden de las cláusulas importa). Todas WHEN NOT MATCHED las cláusulas, excepto la última, deben tener condiciones.

    • Para insertar todas las columnas de la tabla Delta de destino con las columnas correspondientes del conjunto de datos de origen, use INSERT * . Esto es equivalente a INSERT (col1 [, col2 ...]) VALUES (source.col1 [, source.col2 ...]) para todas las columnas de la tabla Delta de destino. Por lo tanto, esta acción supone que la tabla de origen tiene las mismas columnas que las de la tabla de destino; de lo contrario, la consulta producirá un error de análisis.

      Nota

      Este comportamiento cambia cuando se habilita la migración automática de esquemas. Consulte Evolución automática del esquema para obtener más información.

Importante

Se puede producir un error en una operación si varias filas del conjunto de datos de origen coinciden e intentan actualizar las MERGE mismas filas de la tabla Delta de destino. Según la semántica de SQL de combinación, esta operación de actualización es ambigua, ya que no está claro qué fila de origen se debe usar para actualizar la fila de destino coincidente. Puede preprocesar la tabla de origen para eliminar la posibilidad de varias coincidencias. Consulte el ejemplo de captura de datos cambiados: preprocesa el conjunto de datos de cambios (es decir, el conjunto de datos de origen) para conservar solo el último cambio para cada clave antes de aplicar ese cambio en la tabla Delta de destino.

Ejemplos

Puede usar para operaciones complejas, como la desduplicación de datos, la actualización de datos de cambios y la aplicación de MERGE operaciones SCD de tipo 2. Consulte Ejemplos de combinación para ver algunos ejemplos.