1

Mein Team versucht Redshift zu verwenden, um Informationen aus verschiedenen Datenbanken zu konsolidieren. Bei unserem ersten Versuch, diese Lösung zu implementieren, haben wir Kinesis Firehose verwendet, um Datensätze von POSTs in unsere APIs zu schreiben, und S3 hat dann einen COPY-Befehl ausgegeben, um die Daten in die richtigen Tabellen in Redshift zu schreiben. Dies erlaubte uns jedoch nur das Einfügen neuer Daten und ließ uns keine Daten transformieren, Zeilen aktualisieren, wenn sie geändert wurden, oder Zeilen löschen.ETL möglich zwischen S3 und Redshift mit Kinesis Firehose?

Was ist der beste Weg, um ein aktualisiertes Data Warehouse in Redshift zu erhalten, ohne Batch-Transformation zu verwenden? Idealerweise möchten wir, dass Aktualisierungen "automatisch" (< 5 Minuten) erfolgen, wenn Daten in unseren lokalen Datenbanken geändert werden.

Antwort

3
  1. Feuerwehrschlauch oder Redshift hat keine Trigger, aber könnten Sie möglicherweise den Ansatz verwenden, mit Lambda und Firehose zu-Prozess vor den Daten, bevor sie hier wie beschrieben eingefügt werden: https://blogs.aws.amazon.com/bigdata/post/Tx2MUQB5PRWU36K/Persist-Streaming-Data-to-Amazon-S3-using-Amazon-Kinesis-Firehose-and-AWS-Lambda

    In Ihrem Fall, Sie könnten es erweitern, um Lambda on S3 zu verwenden, während Firehose neue Dateien erstellt, die dann eine COPY/SQL-Aktualisierung ausführen.

  2. Eine andere Alternative besteht darin, einen eigenen KCL-Client zu schreiben, der das implementiert, was Firehose tut, und dann die erforderlichen Aktualisierungen nach COPY von Mikro-Chargen (500-1000 Zeilen) auszuführen.

    Ich habe eine solche Implementierung (wir mussten alte Datensätze basierend auf neuen Datensätzen aktualisieren) und es funktioniert aus Konsistenz Sicht gut, obwohl ich im Allgemeinen aufgrund schlechter Redshift Leistung in Bezug auf solche Architektur raten würde zu Aktualisierungen. Basierend auf meinen Erfahrungen besteht die Schlüsselregel darin, dass Redshift-Daten nur anhängig sind und es oft schneller ist, Filter zu verwenden, um unnötige Zeilen zu entfernen (mit optionalem regelmäßigen Zurückschneiden wie täglich), als diese Zeilen in Echtzeit zu löschen/zu aktualisieren. Ein weiteres Alernativ ist es, Firehose-Dump-Daten in die Zwischenspeichertabelle (n) zu laden und dann geplante Jobs zu nehmen, was auch immer in dieser Tabelle ist, die Daten zu verarbeiten, zu verschieben und Tabellen zu rotieren.

Als eine allgemeine Referenz-Architektur für Echtzeit in Redshift-Einsätze, werfen Sie einen Blick auf diese: https://blogs.aws.amazon.com/bigdata/post/Tx2ANLN1PGELDJU/Best-Practices-for-Micro-Batch-Loading-on-Amazon-Redshift

Dieses mehrfach umgesetzt worden ist und gut funktioniert.

+0

Toller Rat! Danke für Ihre Hilfe – awsQuestion