-1

Ich habe mein Data Warehouse auf Amazon Redshift gebaut. Das Problem, dem ich derzeit gegenüberstehe, ist, dass ich eine riesige Faktentabelle (mit ungefähr 500 Millionen Zeilen) in meinem Schema mit Daten für ungefähr 10 Clients habe. Ich habe Prozesse, die regelmäßig (meistens täglich) Daten für diese Faktentabelle generieren und eine Aktualisierung erfordern, dh alte Daten löschen und die neu erzeugten Daten einfügen.Redshift - Datawarehouse Daten aktualisieren

Das Problem ist, dass diese Bulk-Delete-Insert-Operation Löcher in meiner Faktentabelle mit einem Bedarf an VACUUM lassen, was zeitraubend ist und daher nicht sofort durchgeführt werden kann. Und diese Faktentabelle (mit großen Lücken aufgrund gelöschter Daten) wirkt sich dramatisch auf die Snapshot-Zeit aus, die Daten aus den Fakt- und Dimensionstabellen konsumiert und sie im Downstream-Präsentationsbereich auffrischt. Wie kann ich die Aktualisierung von Massendaten in einer DWH-Umgebung optimieren?

Ich glaube, das sollte ein bekanntes Problem in DWH mit einigen empfohlenen Möglichkeiten sein, zu lösen. Kann jemand bitte auf die empfohlene Lösung hinweisen?

S.: Eine Lösung kann sein, Tabelle pro Client zu erstellen und eine Ansicht darüber zu haben, die eine Vereinigung aller zugrunde liegenden Tabellen ausführt. In diesem Fall, wenn ich die Faktentabelle pro Client zertrümmere, ist sie ziemlich klein und kann nach delete-insert schnell gesaugt werden, sucht aber nach Lösungen mit besserer Wartbarkeit.

+0

zu breit Frage, es von der Art der Daten abhängt und wie viel genau aktualisiere Sie (die gesamte Tabelle oder einen Teil davon) – AlexYes

+0

@AlexYes So halte ich Daten für 10 haben Kunden in der Tabelle. Es gibt Jobs, die Daten für diese Clients zu unterschiedlichen Zeitplänen generieren (einige werden täglich und einige wöchentlich ausgeführt). Und wenn sie Daten erzeugen, mache ich einen "Ersetze" für diese Tabelle, die delete-insert ist. Je nach Client können die Daten, die ich auf einmal ersetze, zwischen 10% und 30% der Tabellengröße variieren. Nicht sicher, was Sie mit der Art der Daten meinen? –

+0

Unter Art der Daten verstehe ich Folgendes: Wenn Ihre Entitäten unveränderbar sind (z. B. zählen Sie das N der Seitenaufrufe am Tag), sind die erzeugten Aggregate für Tag N die gleichen, wenn Sie am nächsten Tag N + 1 und wann berechnen Wenn Sie es am Tag N + 10 berechnen, können Sie die Aktualisierung der gesamten Tabelle stoppen und nur noch anhängen. Wenn Ihre Entitäten nicht vollständig unveränderbar sind, sich aber nach einer bestimmten Zeit stabilisiert haben (z. B. Umsatzkonversion nach Führungskohorte, die wahrscheinlich innerhalb von 30 Tagen nach dem Lead erfolgt), können Sie Daten mit einem abschließenden Fenster verarbeiten, dh nur die letzten X Tage erneut verarbeiten jedes Mal – AlexYes

Antwort

0

Sie könnten versuchen, mit verschiedenen Arten von Vacuum zu spielen, gibt es "VACUUM DELETE ONLY", die den Raum zurückfordern wird, aber keine Linien, nicht sicher, ob es für Ihren Anwendungsfall anwendbar ist.

Mehr Infos hier: http://docs.aws.amazon.com/redshift/latest/dg/t_Reclaiming_storage_space202.html

Oder habe ich tiefe Kopie Ansatz, wenn ich mit bekämpfte Tabellen mit zu vielen Spalten saugen. Problem damit könnte sein, dass Sie viel Platz für Zwischenschritte benötigen.

Mehr Infos hier: http://docs.aws.amazon.com/redshift/latest/dg/performing-a-deep-copy.html