

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Exemplos de mesclagem
<a name="merge-examples"></a>

Os seguintes exemplos executam uma mesclarem para atualizar as tabela SALES. O primeiro exemplo usa o método mais simples de excluir a tabela de destino e depois inserir todas as linhas da tabela de preparação. O segundo exemplo exige a atualização de colunas selecionadas da tabela de destino, portanto ele inclui uma etapa de atualização adicional. 

O [Exemplos de mesclagem](#merge-examples) usa um exemplo de conjunto de dados para o Amazon Redshift, chamado conjunto de dados TICKIT. Como pré-requisito, você pode configurar as tabelas e os dados do TICKIT seguindo as instruções disponíveis no guia [Conceitos básicos das tarefas comuns do banco de dados](https://docs.aws.amazon.com/redshift/latest/gsg/database-tasks.html). Informações mais detalhadas sobre o exemplo de conjunto de dados estão disponíveis em [Exemplo de banco de dados](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html). 

**Amostra de fonte de dados de mesclagem**

Os exemplos nesta seção precisam de uma amostra de fonte de dados que inclua atualizações e inserções. Para os exemplos, criaremos uma tabela de amostra chamada SALES\_UPDATE usando dados da tabela SALES. Preencheremos a nova tabela com dados aleatórios que representam novas atividades de vendas para dezembro. Usaremos a tabela de amostra SALES\_UPDATE para criar a tabela de preparação nos exemplos a seguir. 

```
-- Create a sample table as a copy of the SALES table.

create table tickit.sales_update as
select * from tickit.sales;

-- Change every fifth row to have updates.

update tickit.sales_update
set qtysold = qtysold*2,
pricepaid = pricepaid*0.8,
commission = commission*1.1
where saletime > '2008-11-30'
and mod(sellerid, 5) = 0;

-- Add some new rows to have inserts.
-- This example creates a duplicate of every fourth row.

insert into tickit.sales_update
select (salesid + 172456) as salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, getdate() as saletime
from tickit.sales_update
where saletime > '2008-11-30'
and mod(sellerid, 4) = 0;
```

**Exemplo de uma mesclagem que substitui linhas com base em chaves correspondentes**

O seguinte script usa a tabela SALES\_UPDATE para executar uma operação de mesclagem na tabela SALES com novos dados para a atividade de vendas de dezembro. Este exemplo substitui as linhas na tabela SALES que têm atualizações. Para este exemplo, atualizaremos as colunas qtysold e pricepaid, deixando comission e saletime inalteradas.

```
MERGE into tickit.sales 
USING tickit.sales_update sales_update  
on ( sales.salesid = sales_update.salesid
and sales.listid = sales_update.listid
and sales_update.saletime > '2008-11-30'
and (sales.qtysold != sales_update.qtysold 
or sales.pricepaid != sales_update.pricepaid))
WHEN MATCHED THEN
update SET qtysold = sales_update.qtysold,
pricepaid = sales_update.pricepaid
WHEN NOT MATCHED THEN 
INSERT (salesid, listid, sellerid, buyerid, eventid, dateid, qtysold , pricepaid, commission, saletime)
values (sales_update.salesid, sales_update.listid, sales_update.sellerid, sales_update.buyerid, sales_update.eventid, 
sales_update.dateid, sales_update.qtysold , sales_update.pricepaid, sales_update.commission, sales_update.saletime);

-- Drop the staging table.
drop table tickit.sales_update;

-- Test to see that commission and salestime were not impacted.
SELECT sales.salesid, sales.commission, sales.salestime, sales_update.commission, sales_update.salestime 
FROM tickit.sales 
INNER JOIN tickit.sales_update sales_update  
ON 
sales.salesid = sales_update.salesid
AND sales.listid = sales_update.listid
AND sales_update.saletime > '2008-11-30'
AND (sales.commission != sales_update.commission 
OR sales.salestime != sales_update.salestime);
```

**Exemplo de uma mesclagem que especifica uma lista de colunas sem usar MERGE**

O seguinte exemplo executa uma operação de mesclarem para atualizar SALES com novos dados para a atividade de vendas de dezembro. Precisamos de dados de amostra que incluam atualizações e inserções, assim como linhas que não alteraram. Para este exemplo, queremos atualizar as colunas QTYSOLD e PRICEPAID, deixando COMMISSION e SALETIME inalteradas. O seguinte script usa a tabela SALES\_UPDATE para executar uma operação de mesclagem na tabela SALES. 

```
-- Create a staging table and populate it with rows from SALES_UPDATE for Dec
create temp table stagesales as select * from sales_update
where saletime > '2008-11-30';

-- Start a new transaction
begin transaction;

-- Update the target table using an inner join with the staging table
-- The join includes a redundant predicate to collocate on the distribution key –- A filter on saletime enables a range-restricted scan on SALES

update sales
set qtysold = stagesales.qtysold,
pricepaid = stagesales.pricepaid
from stagesales
where sales.salesid = stagesales.salesid
and sales.listid = stagesales.listid
and stagesales.saletime > '2008-11-30'
and (sales.qtysold != stagesales.qtysold 
or sales.pricepaid != stagesales.pricepaid);
 
-- Delete matching rows from the staging table 
-- using an inner join with the target table

delete from stagesales
using sales
where sales.salesid = stagesales.salesid
and sales.listid = stagesales.listid;

-- Insert the remaining rows from the staging table into the target table
insert into sales
select * from stagesales;

-- End transaction and commit
end transaction;

-- Drop the staging table
drop table stagesales;
```