O Amazon Redshift deixará de oferecer suporte ao uso de UDFs em Python após 30 de junho de 2026. Começaremos a aplicar essa alteração em fases. Consulte mais informações sobre os detalhes do fim da vida útil do Python e as opções de migração na publicação do blog
Exemplos de mesclagem
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 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. Informações mais detalhadas sobre o exemplo de conjunto de dados estão disponíveis em Exemplo de banco de dados.
Amostra de fonte de dados de mesclagem
Os exemplos nesta seção usam uma fonte de dados de exemplo que inclui atualizações e inserções. Para configurar os dados de exemplo, crie uma tabela chamada SALES_UPDATE a partir da tabela SALES e preencha-a com dados aleatórios que representem novas atividades de vendas de dezembro. Os exemplos a seguir usam a tabela SALES_UPDATE como tabela de preparação.
-- 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 exemplo a seguir usa a tabela SALES_UPDATE para realizar uma operação de mesclagem na tabela SALES com novos dados referentes à atividade de vendas de dezembro. A mesclagem substitui as linhas da tabela SALES que contêm atualizações, modificando as colunas qtysold e pricepaid, enquanto mantém commission 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 exemplo a seguir realiza uma operação de mesclagem na tabela SALES com novos dados referentes à atividade de dezembro, usando a tabela SALES_UPDATE como fonte de dados. Os dados de exemplo incluem atualizações, inserções e linhas inalteradas. A mesclagem atualiza as colunas qtysold e pricepaid, mas mantém commission e saletime inalteradas.
-- 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;