

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

Atualiza, exclui ou insere linhas de forma condicional em uma tabela do Apache Iceberg. Uma única instrução pode combinar ações de atualização, exclusão e inserção.

**nota**  
`MERGE INTO` é transacional e é compatível somente com tabelas do Apache Iceberg na versão 3 do mecanismo do Athena.

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

Para atualizar, excluir ou inserir linhas de forma condicional em uma tabela do Iceberg, use a sintaxe a seguir.

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

A *when\$1clause* corresponde a uma das seguintes:

```
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` é compatível com um número arbitrário de cláusulas `WHEN` com diferentes condições `MATCHED`. As cláusulas de condição executam as operações `DELETE`, `UPDATE` ou `INSERT` na primeira cláusula `WHEN` selecionada pelo estado `MATCHED` e pela condição de correspondência.

Para cada linha de origem, as cláusulas `WHEN` são processadas por ordem. Somente a primeira cláusula `WHEN` correspondente é executada. As cláusulas subsequentes são ignoradas. Um erro de usuário é gerado quando uma única linha da tabela de destino corresponde a mais de uma linha de origem.

Se uma linha de origem não corresponder a nenhuma cláusula `WHEN` e não houver uma cláusula `WHEN NOT MATCHED`, a linha de origem será ignorada.

Nas cláusulas `WHEN` que têm operações `UPDATE`, as expressões de valor da coluna podem se referir a qualquer campo de destino ou de origem. No caso de `NOT MATCHED`, as expressões `INSERT` podem se referir a qualquer campo de origem.

**Exemplo**  
O exemplo a seguir mescla linhas da segunda tabela com a primeira tabela, se as linhas não existirem na primeira tabela. As colunas listadas na cláusula `VALUES` devem ser prefixadas pelo alias da tabela de origem. As colunas de destino listadas na cláusula `INSERT` *não* devem ter esse prefixo.

```
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 obter mais exemplos de `MERGE INTO`, consulte [Atualizar dados nas tabelas do Iceberg](querying-iceberg-updating-iceberg-table-data.md).