Dimensionsmodellierung und ETL in Rotverschiebung


9

Ich habe die Redshift-Datenbank von Amazon als möglichen zukünftigen Ersatz für unser Data Warehouse untersucht. Meine Erfahrung war immer in der Verwendung von Dimensionsmodellierung und Ralph Kimballs Methoden, daher war es etwas seltsam zu sehen, dass Redshift keine Funktionen wie den seriellen Datentyp für das automatische Inkrementieren von Spalten unterstützt.

Es gibt jedoch diesen aktuellen Blog-Beitrag aus dem AWS Big Data-Blog über die Optimierung von Redshift für ein Sternschema: https://blogs.aws.amazon.com/bigdata/post/Tx1WZP38ERPGK5K/Optimizing-for-Star-Schemas -und-Interleaved-Sorting-on-Amazon-Redshift

Die Frage, die ich habe, ist, was die beste Vorgehensweise zum Laden eines Sternschemas in Redshift ist. Ich kann diese Antwort in keiner Redshift-Dokumentation finden.

Ich neige dazu, meine Dateien aus S3 in Staging-Tabellen zu importieren und dann SQL zu verwenden, um Transformationen wie Suchvorgänge durchzuführen und Ersatzschlüssel zu generieren, bevor sie in die Zieltabellen eingefügt werden.

Tun andere das gerade? Gibt es ein ETL-Tool, das das Geld wert ist, um dies zu vereinfachen?

Antworten:


9

Sie sind mit Kimball definitiv auf dem richtigen Weg und nicht mit Redshift.

Es gibt eine Reihe von Mustern dafür, ich habe sie alle in verschiedenen Anwendungsfällen verwendet

  1. "ELT" -Muster - Laden Sie die Quelltabellen, um sie vollständig rot zu verschieben. Führen Sie keine signifikanten Transformationen durch, bis die Daten geladen wurden. Dazu können Sie entweder in s3 laden und dann den Befehl redshift copy verwenden, oder ich würde die Verwendung von "AWS-Datenmigrationsdiensten" empfehlen, mit denen eine Quelle (z. B. mysql oder postgres) mit einem Ziel (z. B. redshift) synchronisiert werden kann. Anschließend wird regelmäßig ausgeführt SQL-Prozesse innerhalb der Rotverschiebung, um Dims und dann Fakten zu füllen. Sie können Cloud-basierte Tools von Drittanbietern verwenden, um diesen Prozess zu "vereinfachen", wenn Sie möchten - wie z. B. Matillion (ich empfehle nicht, ein Tool von Drittanbietern zu verwenden).
  2. "ETL-Muster" - Transformieren Sie die Daten im Flug mit Apache Spark. und lade die Dims und Fakten in Rotverschiebungsfunken-> s3-> Rotverschiebung. Ich habe EMR dafür verwendet, was gut ist. Dies ist auch der Ansatz, wenn Sie AWS Glue verwenden
  3. Nicht verwandeln! - ähnlich wie 1), aber nur die geladenen Tabellen verwenden.

Beachten Sie, dass Redshift manchmal BESSER funktioniert, wenn Sie eine breite Tabelle mit wiederholten Werten anstelle von Fakten und Dimensionen haben. Der Grund dafür ist, dass Redshift durch den Spaltenansatz die verschiedenen Werte auf ein Niveau komprimieren kann, das ziemlich effizient ist. Ich habe keine Formel, wann viele Dimensionen im Vergleich zu einem flachen, breiten Tisch verwendet werden sollen. Der einzige Weg ist, es zu versuchen und zu sehen!

Einige Links

AWS DMS für Redshift Taret

AWS-Kleber


1
Stimmen Sie dem Kommentar zur Verwendung breiter Tabellen anstelle des Sternschemas zu. Wenn Ihre Dimensionen relativ einfach sind (wenige Attribute), sollten Sie nur alle Daten in einer Tabelle zusammenführen. Dies ist für die meisten Benutzer von herkömmlichen Datenbankplattformen wie SQL Server und Oracle nicht intuitiv, macht jedoch Sinn, wenn Sie darüber nachdenken, wie eine säulenförmige MPP-Datenbank wie Redshift tatsächlich funktioniert.
Nathan Griffiths

Ich stimme dieser Einschätzung der Auswirkungen auf die Leistung und der Einfachheit von Abfragen zu, aber wenn sich die Dimensionen in der Regel ändern, kann die Aufteilung in Dimensionstabellen verwirrende Ergebnisse lindern.
Merlin

2

Für ETL gibt es AWS Glue. Es ist ein verwalteter, serverloser ETL-Dienst, der unter anderem in Redshift geladen wird.

https://aws.amazon.com/glue/


Ich würde sagen, lesen Sie sehr sorgfältig darüber, welche Einschränkungen für Glue gelten. Wenn Sie beispielsweise Python-Skripte verwenden möchten, sind Pandas und Numpy nicht verfügbar. Außerdem können Ihre Skripte nicht einfach von einem Ereignis ausgelöst werden. Wenn Sie also ein ETL-System vom Streaming-Typ ausführen möchten, benötigen Sie auch Lambdas, um die Ausführung der Skripte usw. auszulösen.
PizzaTheHut

2

Ich beschäftige mich derzeit mit einer ähnlichen Aufgabe. Es soll ein ETL-Prozessmodell erstellen und ein dimensionales Modell entwerfen. Ich habe viel recherchiert, um den besten Weg zu finden, und eine erstaunlich hilfreiche Quelle für Techniken gefunden, die wir bei der Arbeit mit MPP unbedingt anwenden sollten.

Um die Frage zu beantworten

Die Frage, die ich habe, ist, was die beste Vorgehensweise zum Laden eines Sternschemas in Redshift ist.

Schauen Sie sich unbedingt diese Ressource an . Ich wette, Sie werden es unglaublich hilfreich finden. Es handelt sich um ein ~ 35-seitiges Dokument mit leistungsstarken Techniken, um die Verwendung von MPP-Spaltenspeichern optimal zu nutzen. Es unterstützt die Kommentare, die Sie mögen

Beachten Sie, dass Redshift manchmal BESSER funktioniert, wenn Sie eine breite Tabelle mit wiederholten Werten anstelle von Fakten und Dimensionen haben. Der Grund dafür ist, dass Redshift durch den Spaltenansatz die verschiedenen Werte auf ein Niveau komprimieren kann, das ziemlich effizient ist. Ich habe keine Formel, wann viele Dimensionen im Vergleich zu einem flachen, breiten Tisch verwendet werden sollen. Der einzige Weg ist, es zu versuchen und zu sehen!

Kommentar von Jon Scott

Ich hoffe, Sie finden es genauso nützlich wie ich


1

Ich denke, das Laden aus S3 ist ein gängiges Muster.

Wir mussten Eindeutigkeitsbeschränkungen durchsetzen, also haben wir uns entschieden, in Postgres zu schreiben und dann alle 10 Minuten neue Daten zu replizieren, um sie zu verschieben.

Wir verwenden https://github.com/uswitch/blueshift , um in Redshift zu laden.


1

Da Redshift eine Säulendatenbank ist, unterscheidet sich die Speicher- und Abfrageleistung von RDBMS-Modellen. Die Optimierung für eine Säulendatenbank ist ebenfalls unterschiedlich. Da normalerweise weniger Festplatten-E / A und weniger Daten von der Festplatte geladen werden, sind Abfragen schneller.

In Bezug auf den AWS-Blog-Beitrag, auf den Sie verweisen, haben Sie sich diese Empfehlungen angesehen und überlegt, welche Optionen für Ihre Daten für Verteilung, Schlüssel, Cursor, Workload-Management usw. am besten geeignet sind, und haben zumindest eine gute Vorstellung von dem Ansatz du würdest verwenden. Ich finde es einfacher, mit einer visuellen Darstellung zu arbeiten. Sie könnten ein schnelles und schmutziges DB-Diagramm in Betracht ziehen, das zeigt, wie Ihre vorhandenen Tabellen zu Redshift migrieren würden. Behandeln Sie die wichtigsten, um ein Gefühl dafür zu bekommen, wie viele Daten wohin gehen. Und ich würde auf jeden Fall die ODBC / JDBC-Treiber von Amazon verwenden. Das Laden großer Datenmengen kann in jedem Fall problematisch sein, geschweige denn das Wechseln zu einem anderen DB-Typ.

Was ETL / ELT betrifft, gibt es AWS Glue, wie andere Poster erwähnt haben. Und ja, es gibt eine Reihe von Tools, von denen einige kostenlos sind. Amazon verfügt über einen DB Best Practices Guide , der Ihnen ebenfalls helfen kann. Ein Tipp, den ich in anderen Foren gesehen habe, ist, Ihre Daten so roh wie möglich zu laden und die Transformationen in Redshift durchzuführen. Das würde Sie zu einem ELT-Prozess führen. Bei so vielen Optionen wäre es vielleicht hilfreich, einen Vergleich der beiden Methoden zu betrachten. Hier ist ein Blog-Artikel von Panopoly, in dem die Unterschiede erläutert werden. Er kann Ihnen bei der Entscheidung für einen Pfad helfen.


1

Amazon hat kürzlich einige Best Practices für ETL in Redshift veröffentlicht

https://aws.amazon.com/blogs/big-data/top-8-best-practices-for-high-performance-etl-processing-using-amazon-redshift/

In einer Präsentation zu diesem Thema, Tony Gibbs, empfiehlt AWS Solution Architect das folgende Muster für das Laden im UPSERT-Stil:

  1. Laden Sie CSV-Daten (aus S3) in die Staging-Tabelle
  2. Löschen Sie übereinstimmende Zeilen aus der PRD-Tabelle
  3. Daten von der Bühne einfügen

    BEGIN;
    CREATE TEMP TABLE staging(LIKE …);  copies dist keys
    copy staging from s3://… COMPUTE OFF;
    DELETE deep_dive d
    USING staging s WHERE d.aid = s.aid;
    INSERT INTO deep_dive SELECT * FROM staging
    DROP table staging;
    COMMIT;

Wenn möglich, ziehen Sie DROP TABLE oder TRUNCATE DELETE vor, um Geisterzeilen zu vermeiden

Sehen Sie sich ein Video seines Vortrags und der Folien an .

In unserem Team laden wir normalerweise Daten direkt aus S3 mithilfe der SQL COPY- Anweisung in Redshift .

Und verwalten Sie alle unsere ETL die hervorragende Verwendung von Apache Airflow - Tool.

Wir verwenden auch Integrationsdienste wie Stich, die direkt in Redshift schreiben, und verwenden dann CREATE TABLE LIKE und SELECT INTO , um die Daten in ein anderes Schema zu verschieben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.