Wir haben ein Data-Warehouse-System, in dem wir Daten auf s3 im CSV-Format zu redshift Tabellen laden müssen. Die einzige Einschränkung besteht darin, dass nur eindeutige Datensätze in die Rotverschiebung eingefügt werden.ist "INSERT INTO SELECT" frei von Race-Bedingungen in Rotverschiebung
Um dies zu implementieren, verwenden wir Staging-Tabelle in folgender Weise.
ERSTELLEN EINER VORÜBERGEHENDEN TABELLE.
KOPIEREN SIE DIE S3-DATEI IN DIE TEMOPRAR-TABELLE.
TRANSACTION
INSERT INTO {main Rotverschiebung table} wählen Sie aus BEGIN {Verbindung zwischen Staging-Tabelle und Haupt Rotverschiebung Tabelle auf eine Säule, die eindeutig sein sollte für einen Datensatz eindeutig sein}
END TRANSACTION
Der Join, der in der Select-Unterabfrage verwendet wird, gibt die Datensätze zurück, die in der Staging-Tabelle, jedoch nicht in der Haupt-Redshift-Tabelle vorhanden sind.
Ist der obige Mechanismus frei von Rennbedingungen.
Zum Beispiel betrachten -
Haupt Rotverschiebung Tabelle hat keine Zeilen und eine s3-Datei enthält zwei Datensätze.
Also, wenn die gleiche s3-Datei von zwei verschiedenen Prozess/Anfragen geladen wird. Die Select-Abfrage für jede Anforderung liest die Haupt-Redshift-Tabelle als leer und der Join gibt beide Zeilen zurück, die in der Staging-Tabelle vorhanden sind, und die zwei Zeilen werden zweimal eingefügt, was zu doppelten Zeilen führt.