MERGE INTO - Amazon Athena

MERGE INTO

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

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_clause 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 Iceberg.