Ausführen einer Zusammenführungsoperation durch Angabe einer Spaltenliste ohne den Befehl MERGE - Amazon Redshift

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.

Ausführen einer Zusammenführungsoperation durch Angabe einer Spaltenliste ohne den Befehl MERGE

Wenn Sie die im Verfahren beschriebene Zusammenführungsoperation ausführen, führen Sie alle Schritte in einer einzigen Transaktion aus. Die Transaktion wird rückgängig gemacht, falls ein Schritt fehlschlägt. Die Verwendung einer einzelnen Transaktion reduziert auch die Anzahl der Commit-Vorgänge, was Zeit und Ressourcen spart.

So führen Sie eine Zusammenführungsoperation durch Angabe einer Spaltenliste aus
  1. Platzieren Sie die gesamte Operation in einen einzigen Transaktionsblock.

    begin transaction; … end transaction;
  2. Erstellen Sie eine Staging-Tabelle und füllen Sie sie mit Daten aus, die zusammengeführt werden sollen, wie im folgenden Pseudocode gezeigt.

    create temp table stage (like target); insert into stage select * from source where source.filter = 'filter_expression';
  3. Aktualisieren Sie die Zieltabelle mittels eines internen Joins mit der Staging-Tabelle.

    • Listen Sie in der UPDATE-Klausel explizit die Spalten auf, die aktualisiert werden sollen.

    • Führen Sie einen internen Join mit der Staging-Tabelle aus.

    • Wenn sich der Verteilungsschlüssel vom primären Schlüssel unterscheidet und der Verteilungsschlüssel nicht aktualisiert wird, fügen Sie für den Verteilungsschlüssel einen redundanten Join hinzu. Um zu überprüfen, ob die Abfrage einen zusammengefassten Join verwendet, führen Sie die Abfrage mit EXPLAIN aus und suchen für alle Joins nach DS_DIST_NONE. Weitere Informationen finden Sie unter Auswerten des Abfrageplans

    • Wenn Ihre Zieltabelle nach Zeitstempel sortiert ist, fügen Sie ein Prädikat hinzu, um Scans mit eingeschränkten Bereichen für die Zieltabelle zu nutzen. Weitere Informationen finden Sie unter Bewährte Methoden für die Gestaltung von Abfragen mit Amazon Redshift.

    • Wenn Sie nicht alle Zeilen in der Zusammenführung verwenden, fügen Sie eine Klausel hinzu, um die Zeilen herauszufiltern, die Sie ändern möchten. Sie können beispielsweise einen Ungleichheitsfilter zu einer oder mehreren Zeilen hinzufügen, um Zeilen auszuschließen, die nicht geändert wurden.

    • Platzieren Sie die Operationen zum Aktualisieren, Löschen und Einfügen in einem einzigen Transaktionsblock, damit ein Rollback ausgeführt werden kann, wenn es Probleme gibt.

    Beispiel:

    begin transaction; update target set col1 = stage.col1, col2 = stage.col2, col3 = 'expression' from stage where target.primarykey = stage.primarykey and target.distkey = stage.distkey and target.col3 > 'last_update_time' and (target.col1 != stage.col1 or target.col2 != stage.col2 or target.col3 = 'filter_expression');
  4. Löschen Sie nicht benötigte Zeilen aus der Staging-Tabelle, indem Sie einen internen Join mit der Zieltabelle verwenden. Einige Zeilen in der Zieltabelle stimmen bereits mit den entsprechenden Zeilen in der Staging-Tabelle überein. Andere Zeilen wurden im vorherigen Schritt aktualisiert. In beiden Fällen werden diese Zeilen für die Einfügungsoperation nicht benötigt.

    delete from stage using target where stage.primarykey = target.primarykey;
  5. Fügen Sie die verbleibenden Zeilen aus der Staging-Tabelle ein. Verwenden Sie hierfür dieselbe Spaltenliste in der VALUES-Klausel, die Sie in Schritt zwei in der UPDATE-Anweisung verwendet haben.

    insert into target (select col1, col2, 'expression' from stage); end transaction;
  6. Entfernen Sie die Staging-Tabelle.

    drop table stage;