

# MERGE INTO
<a name="merge-into-statement"></a>

Actualiza, elimina o inserta filas de forma condicional en una tabla de Apache Iceberg. Una sola instrucción puede combinar acciones de actualización, eliminación e inserción.

**nota**  
`MERGE INTO` es transaccional y solo es compatible con las tablas de Apache Iceberg en la versión 3 del motor Athena.

## Sinopsis
<a name="merge-into-statement-synopsis"></a>

Para actualizar, eliminar o insertar filas de forma condicional de una tabla de Iceberg, use la siguiente sintaxis.

```
MERGE INTO target_table [ [ AS ]  target_alias ]
USING { source_table | query } [ [ AS ] source_alias ]
ON search_condition
when_clause [...]
```

La cláusula *when\$1clause* es una de las siguientes:

```
WHEN MATCHED [ AND condition ]
    THEN DELETE
```

```
WHEN MATCHED [ AND condition ]
    THEN UPDATE SET ( column = expression [, ...] )
```

```
WHEN NOT MATCHED [ AND condition ]
    THEN INSERT (column_name[, column_name ...]) VALUES (expression, ...)
```

`MERGE` admite un número arbitrario de cláusulas `WHEN` con diferentes condiciones `MATCHED`. Las cláusulas de condición ejecutan la operación `DELETE`, `UPDATE` o `INSERT` de la primera cláusula `WHEN` seleccionada por el estado `MATCHED` y la condición de coincidencia.

Para cada fila de origen, las cláusulas `WHEN` se procesan en orden. Solo se ejecuta la primera cláusula `WHEN` coincidente. Las demás cláusulas se ignoran. Se produce un error de usuario cuando una sola fila de la tabla de destino coincide con más de una fila de origen.

Si una fila de origen no coincide con ninguna cláusula `WHEN` y no hay ninguna cláusula `WHEN NOT MATCHED`, se ignora la fila de origen.

En las cláusulas `WHEN` que tienen operaciones `UPDATE`, las expresiones de valores de la columna pueden hacer referencia a cualquier campo del destino o del origen. En el caso de `NOT MATCHED`, las expresiones `INSERT` pueden referirse a cualquier campo del origen.

**Ejemplo**  
En el siguiente ejemplo, se combinan filas de la segunda tabla en la primera tabla si las filas no existen en la primera tabla. Tenga en cuenta que las columnas que aparecen en la cláusula `VALUES` deben ir precedidas del alias de la tabla de origen. Las columnas de destino enumeradas en la cláusula `INSERT` *no* deben tener ese prefijo.

```
MERGE INTO iceberg_table_sample as ice1
USING iceberg2_table_sample as ice2
ON ice1.col1 = ice2.col1
WHEN NOT MATCHED 
THEN INSERT (col1)
      VALUES (ice2.col1)
```

Para obtener más ejemplos de `MERGE INTO`, consulte [Actualización de los datos de las tablas de Iceberg](querying-iceberg-updating-iceberg-table-data.md).