Amazon Redshift unterstützt die Verwendung von Python-UDFs nach dem 30. Juni 2026 nicht mehr. Wir werden damit beginnen, es schrittweise durchzusetzen. Weitere Informationen zum Ende der Lebensdauer von Python und zu den Migrationsoptionen finden Sie im Blogbeitrag
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Beispiele für Zusammenführungen
In den folgenden Beispielen werden Zusammenführungen ausgeführt, um die Tabelle SALES zu aktualisieren. Im ersten Beispiel wird die einfachere Methode verwendet, bei der alle Zeilen in der Zieltabelle gelöscht werden und anschließend alle Zeilen aus der Staging-Tabelle eingefügt werden. Im zweiten Beispiel müssen ausgewählte Spalten in der Zieltabelle aktualisiert werden. Daher enthält es einen zusätzlichen Aktualisierungsschritt.
In Beispiele für Zusammenführungen wird ein Beispieldatensatz für Amazon Redshift verwendet, der sogenannte TICKIT-Datensatz. Als Voraussetzung können Sie die TICKIT-Tabellen und -Daten einrichten, indem Sie den Anweisungen in der Anleitung Erste Schritte mit gängigen Datenbankaufgaben folgen. Weitere Informationen zum Beispieldatensatz finden Sie unter Beispieldatenbank.
Beispieldatenquelle für eine Zusammenführung
Die Beispiele in diesem Abschnitt verwenden eine Beispieldatenquelle, die sowohl Aktualisierungen als auch Einfügungen enthält. Um die Beispieldaten einzurichten, erstellen Sie eine Tabelle mit dem Namen SALES_UPDATE aus der SALES-Tabelle und füllen sie mit zufälligen Daten auf, die die neuen Verkaufsaktivitäten für Dezember darstellen. In den folgenden Beispielen wird die SALES_UPDATE-Tabelle als Staging-Tabelle verwendet.
-- 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;
Beispiel für eine Zusammenführung, bei der vorhandene Zeilen basierend auf übereinstimmenden Schlüsseln ersetzt werden
Im folgenden Beispiel wird die SALES_UPDATE-Tabelle verwendet, um einen Zusammenführungsvorgang für die SALES-Tabelle mit neuen Daten für die Verkaufsaktivitäten im Dezember durchzuführen. Bei der Zusammenführung werden Zeilen in der SALES-Tabelle ersetzt, die Aktualisierungen enthalten. Dabei werden die pricepaid Spalten qtysold und geändert, während sie unverändert bleibencommission. saletime
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);
Beispiel für eine Zusammenführung, bei der eine Spaltenliste angegeben wird, ohne den Befehl MERGE zu verwenden
Im folgenden Beispiel wird eine Zusammenführung der SALES-Tabelle mit neuen Daten für die Dezember-Aktivität durchgeführt, wobei die SALES_UPDATE-Tabelle als Datenquelle verwendet wird. Die Beispieldaten enthalten Aktualisierungen, Einfügungen und unveränderte Zeilen. Bei der Zusammenführung werden die qtysold und pricepaid -Spalten aktualisiert, wobei der Wert commission und der Wert saletime unverändert bleibt.
-- 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;