Leitfaden zur Migration von Amazon RedShift zu Snowflake

Snowflake-Migrationsframework

Eine typische Migration von Amazon RedShift zu Snowflake besteht aus neun Hauptphasen. Dieser Leitfaden bietet einen umfassenden Rahmen, um die technischen und strategischen Herausforderungen zu bewältigen und einen reibungslosen Übergang zur Cloud-Datenplattform von Snowflake sicherzustellen.

Migrationsphasen

Phase 1: Planung und Entwurf

Diese anfängliche Phase ist entscheidend, um die Grundlage für eine erfolgreiche Migration zu schaffen. Das Übereilen dieses Schrittes führt häufig zu einer schleichenden Veränderung des Projektumfangs, Budgetüberschreitungen und verpassten Fristen. Ein gründlicher Plan stellt sicher, dass alle Interessengruppen abgestimmt und die Ziele des Projekts klar definiert sind.

Konkrete Schritte:

  • Führen Sie eine gründliche Bewertung Ihrer RedShift-Umgebung durch:

    • Bestandsaufnahme und Analyse: Erfassen Sie alle Datenbanken, Schemas, Tabellen, Ansichten, gespeicherten Prozeduren und benutzerdefinierten Funktionen (UDFs) in Ihrem RedShift-Cluster. Verwenden Sie RedShift-Systemtabellen (SVV_TABLE_INFO, PG_PROC usw.) zum Sammeln von Metadaten.

    • Analyse der Workloads: Verwenden Sie die RedShift-Ansichten STL_QUERY und SVL_QUERY_SUMMARY, um Abfragemuster, Benutzerkonkurrenz und Performance-Engpässe zu identifizieren. Diese Daten sind entscheidend für die Entwicklung Ihrer Snowflake-Virtual-Warehouse-Strategie.

    • Abhängigkeiten identifizieren: Erfassen Sie alle vorgelagerten Datenquellen (ETL/ELT-Jobs) sowie nachgelagerte Verbraucher (BI-Tools, Anwendungen, Data-Science-Notebooks).

  • Migrationsbereich und Migrationsstrategie definieren:

    • Workloads priorisieren: Klassifizieren Sie Workloads nach geschäftlichen Auswirkungen und technischer Komplexität. Beginnen Sie mit einer Workload, die großen Nutzen bei geringer Komplexität bietet, um einen schnellen Erfolg zu erzielen und Schwung aufzubauen.

    • Migrationsansatz wählen: Entscheiden Sie sich entweder für einen „Lift-and-Shift“-Ansatz für eine schnellere Migration oder für eine Neuarchitektur, um Datenmodelle und Pipelines zu modernisieren und zu optimieren.

  • Projektplan entwickeln:

    • Team aufstellen: Bilden Sie ein Migrationsteam mit klar definierten Rollen und Verantwortlichkeiten (z. B. Projektmanager, Data Engineer, Datenarchitekt, DBA-Security-Administrator, Business-Analyst).

    • Zeitleiste erstellen: Definieren Sie realistische Zeitpläne und Meilensteine für jede der neun Phasen.

    • Erfolgskennzahlen definieren: Legen Sie klare KPIs fest, um den Erfolg der Migration zu messen, z. B. Kostenreduzierung, Verbesserung der Abfrageleistung und Benutzerabhängigkeit.

Phase 2: Umgebung und Sicherheit

Mit einem robusten Plan müssen Sie als Nächstes die Snowflake-Umgebung vorbereiten und Ihren Sicherheitsstatus replizieren. Ein wesentlicher Vorteil der Migration von RedShift besteht darin, dass beide Plattformen in der Regel beim selben Cloud-Anbieter (AWS) betrieben werden, was die Datenübertragung vereinfacht.

Konkrete Schritte:

  • Einrichten Ihres Snowflake-Kontos:

    • Edition und Cloud-Anbieter wählen: Wählen Sie die Snowflake-Edition (z. B. Standard, Enterprise, Business Critical), die Ihren Anforderungen entspricht. Wählen Sie AWS als Cloudanbieter und wählen Sie dieselbe Region wie Ihre aktuellen S3-Buckets, um Datenübertragungskosten und Latenzen zu minimieren.

    • Entwerfen einer Warehouse-Strategie: Erstellen Sie auf Grundlage der Workload-Analyse aus Phase 1 einen ersten Satz virtueller Warehouses. Isolieren Sie verschiedene Workloads (z. B. WH_LOADING, WH_TRANSFORM, WH_BI_ANALYTICS), um Ressourcenkonflikte zu verhindern. Beginnen Sie mit T-Shirt-Größen (z. B. X-Small, Small) und planen Sie, diese anhand von Performance-Tests anzupassen.

  • Sicherheitsmodell implementieren:

    • RedShift-Benutzer und -Gruppen auf Snowflake-Rollen abbilden: Übertragen Sie die Benutzer- und Gruppenberechtigungen aus RedShift in das Role-Based Access Control (RBAC)-Modell von Snowflake. Erstellen Sie eine Hierarchie von funktionalen Rollen (z. B. SYSADMIN, SECURITYADMIN) und Zugriffsrollen (z. B. BI_READ_ONLY, ETL_READ_WRITE).

    • Netzwerkrichtlinien und Authentifizierung konfigurieren: Richten Sie Netzwerkrichtlinien ein, um den Zugriff auf vertrauenswürdige IP-Adressen zu beschränken. Konfigurieren Sie Authentifizierungsmethoden, wie föderierte Authentifizierung (SSO), unter Verwendung eines Identitätsanbieters wie Okta oder Azure AD.

Phase 3: Konvertierung von Datenbankcode

In dieser Phase werden die DDL-, DML-Anweisungen und prozeduralen Codes aus RedShift so konvertiert, dass sie mit Snowflake kompatibel sind. Automatisierungstools können diesen Prozess beschleunigen, aber eine manuelle Überprüfung und Anpassung ist aufgrund der Unterschiede in den SQL-Dialekten und der Plattformarchitektur unerlässlich.

Konkrete Schritte:

  • DDL konvertieren (Datendefinitionssprache):

    • Tabellen und Ansichten: Extrahieren Sie CREATE TABLE- und CREATE VIEW-Anweisungen von RedShift. Konvertieren Sie RedShift-spezifische Datentypen in ihre Snowflake-Äquivalente (siehe Anhang 2).

    • RedShift-spezifische Klauseln entfernen: Beseitigen Sie RedShift-spezifische Klauseln für physisches Design wie DISTSTYLE, DISTKEY und SORTKEY. Die Architektur von Snowflake übernimmt die Datenverteilung und das Clustering automatisch oder über logische Gruppierungsschlüssel für sehr große Tabellen.

  • Konvertieren von DML (Data Manipulation Language) und prozeduraler Code:

    • Gespeicherte Prozeduren neu schreiben: RedShift verwendet PL/pgSQL für gespeicherte Prozeduren. Diese müssen manuell in eine von Snowflake unterstützte Sprache umgeschrieben werden, z. B. Snowflake Scripting (SQL), JavaScript, Python oder Java. Dies ist oft der zeitaufwändigste Teil des Codekonvertierungsprozesses.

    • SQL-Funktionen übersetzen: Ordnen Sie RedShift-spezifische Funktionen ihren Snowflake-Gegenstücken zu. Aus GETDATE() in RedShift wird beispielsweise CURRENT_TIMESTAMP() in Snowflake. Allgemeine Funktionszuordnungen finden Sie in Anhang 3.

    • Wartungsbefehle ersetzen: Skripte, die RedShift-spezifische Befehle wie VACUUM, ANALYZE und REINDEX enthalten, sollten entfernt werden, da Snowflake diese Wartungsaufgaben automatisch übernimmt.

Phase 4: Datenmigration

Diese Phase konzentriert sich auf die physische Verschiebung historischer Daten von Ihrem RedShift-Cluster in Snowflake-Tabellen. Die effizienteste Methode nutzt Amazon S3 als zwischengeschalteten Stagingbereich.

Konkrete Schritte:

  • Daten von RedShift in S3 entladen:

    • Verwenden Sie den RedShift-BefehlUNLOAD, um Daten aus Tabellen in einen bestimmten S3-Bucket zu exportieren. Diese ist hochgradig parallelisiert und deutlich schneller als eine SELECT-Abfrage über ein Clienttool.

    • Formatieren Sie die Daten als Parquet oder komprimierte CSV-Dateien, um eine optimale Lade-Performance in Snowflake zu erreichen. Verwenden Sie die Option PARALLEL ON zum Schreiben mehrerer Dateien.

  • Daten aus S3 in Snowflake laden:

    • Externe Stagingbereiche erstellen: Erstellen Sie in Snowflake ein externes Stagingobjekt, das auf den S3-Bucket verweist, der Ihre entladenen Daten enthält.

    • COPY INTO-Befehl verwenden: Verwenden Sie den Snowflake-Befehl COPY INTO <table> zum Laden der Daten aus dem S3-Stagingbereich in die Snowflake-Zieltabellen. Dieser Befehl ist hochleistungsfähig und skalierbar.

    • Größeres Warehouse nutzen: Verwenden Sie für den initialen Datenimport ein dediziertes, größeres virtuelles Warehouse, um den Prozess zu beschleunigen, und skalieren Sie es anschließend herunter oder setzen Sie es aus, um die Kosten zu optimieren.

Phase 5: Datenaufnahme

Sobald die historischen Daten migriert sind, müssen Sie Ihre laufenden Datenaufnahmepipelines neu gestalten, um die Daten direkt in Snowflake statt in RedShift einzuspeisen.

Konkrete Schritte:

  • ETL/ELT-Batch-Jobs migrieren:

    • Aktualisieren Sie bestehende ETL-Jobs (in Tools wie AWS Glue, Talend oder Informatica), um Snowflake als Ziel anzusteuern. Dies umfasst in der Regel das Ändern der Verbindungsdetails und das Aktualisieren etwaiger SQL-Overrides, damit sie den Snowflake-Dialekt verwenden.

  • Kontinuierliche Datenaufnahme mit Snowpipe implementieren:

    • Konfigurieren Sie Snowpipe für kontinuierliche Datenströme (z. B. von Kinesis oder Anwendungsprotokolle, die in S3 landen). Snowpipe lädt neue Datendateien automatisch und effizient aus S3 in Snowflake-Tabellen, sobald sie eintreffen, und bietet so nahezu eine Echtzeit-Datenintegration.

  • Das Snowflake-Ökosystem nutzen:

    • Nutzen Sie die nativen Connectoren von Snowflake für Plattformen wie Kafka und Spark, um das direkte Data-Streaming zu vereinfachen.

Phase 6: Berichterstattung und Analyse

In dieser Phase werden alle nachgelagerten Anwendungen umgeleitet, insbesondere BI und Berichtstools, um Daten von Snowflake abzufragen.

Konkrete Schritte:

  • Verbindungstreiber aktualisieren: Installieren und konfigurieren Sie die Snowflake-Treiber ODBC/JDBC auf Servern, die Ihre BI-Tools hosten (z. B. Tableau Server, Power BI Gateway).

  • Berichte und Dashboards umleiten:

    • Ändern Sie in Ihren BI-Tools die Datenquellenverbindung von RedShift auf Snowflake.

    • Testen Sie alle kritischen Berichte und Dashboards, um sicherzustellen, dass sie korrekt funktionieren.

  • Abfragen überprüfen und optimieren:

    • Einige Dashboards können benutzerdefinierte SQL- oder datenbankspezifische Funktionen enthalten. Überprüfen und überarbeiten Sie diese Abfragen, damit sie den SQL-Dialekt von Snowflake verwenden und dessen Performance-Features ausnutzen. Verwenden Sie das Query Profile-Tool in Snowflake, um langsam laufende Berichte zu analysieren und zu optimieren.

Phase 7: Datenvalidierung und Testen

Gründliche Tests sind unerlässlich, um das Vertrauen der Kunden in die neue Plattform aufzubauen und sicherzustellen, dass Datenintegrität und -Performance den Erwartungen entsprechen.

Konkrete Schritte:

  • Datenvalidierung durchführen:

    • Zeilenzahlen: Vergleichen Sie die Zeilenanzahlen zwischen Quelltabellen in RedShift und Zieltabellen in Snowflake.

    • Validierung auf Zellenebene: Führen Sie für kritische Tabellen eine detailliertere Prüfung durch, indem Sie aggregierte Werte vergleichen (z. B. SUM(), AVG(), MIN(), MAX()) oder Prüfsummen auf Schlüsselfeldern verwenden.

  • Abfrage- und Performance-Tests durchführen:

    • Benchmark-Abfragen: Führen Sie einen repräsentativen Satz von Abfragen sowohl gegen RedShift als auch gegen Snowflake aus und vergleichen Sie Ergebnisse und Performance.

    • BI-Tool-Performance: Testen Sie die Ladezeiten und die Interaktivität der wichtigsten Dashboards, die mit Snowflake verbunden sind.

  • Benutzeraktualisierungstests (UAT):

    • Beziehen Sie Geschäftsanwender ein, um ihre Berichte zu validieren und ihre täglichen Aufgaben in der neuen Snowflake-Umgebung auszuführen. Sammeln Sie Feedback, und gehen Sie alle Probleme an.

Phase 8: Bereitstellung

Die Bereitstellung ist die letzte Umstellung von RedShift auf Snowflake. Dieser Prozess sollte sorgfältig verwaltet werden, um Unterbrechungen des Geschäftsbetriebs zu minimieren.

Konkrete Schritte:

  • Übergangsplan erstellen:

    • Definieren Sie die Abfolge der Ereignisse für das Übergangswochenende oder den Übergangsabend. Dazu gehören das Anhalten der ETL-Jobs, die auf RedShift verweisen, das Durchführen einer finalen Datensynchronisation, das Umleiten aller Verbindungen sowie die Überprüfung des Systemzustands.

  • Endgültige Datensynchronisierung ausführen:

    • Führen Sie ein letztes inkrementelles Laden von Daten durch, um alle Datenänderungen zu erfassen, die während der Testphase aufgetreten sind.

  • Live gehen:

    • Stellen Sie alle Produktionsdatenpipelines und Benutzerverbindungen von RedShift auf Snowflake um.

    • Halten Sie die RedShift-Umgebung als Fallback für eine kurze Zeit in einem schreibgeschützten Zustand, bevor Sie sie außer Kraft setzen.

  • RedShift stilllegen:

    • Sobald die Snowflake-Umgebung stabil und in der Produktion validiert wurde, können Sie Ihren RedShift-Cluster stilllegen, um zusätzliche Kosten zu vermeiden.

Phase 9: Optimieren und ausführen

Diese letzte Phase ist ein fortlaufender Prozess der Verwaltung von Performance, Kosten und Governance in Ihrer neuen Snowflake-Umgebung. Ziel ist es, Ihr Setup kontinuierlich zu verbessern, um den Wert zu maximieren.

Konkrete Schritte:

  • Performance- und Kostenoptimierung implementieren:

    • Optimale Warehouse-Größe festlegen: Überwachen Sie die Workload-Performance kontinuierlich und passen Sie die Größe der virtuellen Warehouses nach oben oder unten an, um die SLAs zu den geringstmöglichen Kosten zu erfüllen.

    • Aggressive Auto-Suspend-Richtlinien festlegen: Setzen Sie das Auto-Suspend-Timeout für alle Warehouses auf 60 Sekunden, um Kosten für ungenutzte Rechenzeit zu vermeiden.

    • Gruppierungsschlüssel verwenden: Analysieren Sie für sehr große Tabellen (mehrere Terabyte) Abfragemuster und definieren Sie Gruppierungsschlüssel, um die Performance hoch gefilterter Abfragen zu verbessern.

  • Langfristige FinOps und Governance einrichten:

    • Kosten überwachen: Verwenden Sie das Snowflake-ACCOUNT_USAGE-Schema und Ressourcenmonitore, um den Credit-Verbrauch zu verfolgen und Budgetüberschreitungen zu verhindern.

    • Sicherheit verbessern: Überprüfen Sie Rollen und Berechtigungen regelmäßig, um sicherzustellen, dass das Prinzip der geringsten Berechtigungen eingehalten wird. Implementieren Sie erweiterte Sicherheits-Features wie dynamische Datenmaskierung und Zeilenzugriffsrichtlinien für sensible Daten.

Anhang

Anhang 1: Snowflake im Vergleich zur RedShift-Architektur

Feature

Amazon RedShift

Snowflake

Architektur

Eng verknüpfte Verarbeitung und Speicherung (MPP)

Entkoppelte Datenverarbeitung, Speicher und Cloud-Services (Multi-Cluster, Shared Data)

Speicher

Verwalteter spaltenweiser Speicher auf lokalen SSDs, die an Knoten angehängt sind.

Zentraler Objektspeicher (z. B. S3) mit automatischer Mikropartitionierung

Server

Cluster von Knoten mit fester Größe (Leader + Serverknoten)

Flexible, bedarfsgesteuerte virtuelle Warehouses (Computecluster)

Parallelität

Begrenzt durch die Clustergröße; Abfragen können in die Warteschlange gestellt werden

Hohe Parallelität durch Multi-Cluster-Warehouses, die automatisch eingerichtet werden.

Skalierung

Skalierung durch Hinzufügen von Knoten (dauert Minuten bis Stunden, beinhaltet die Neuverteilung der Daten)

Rechenleistung kann in Sekundenschnelle vertikal oder horizontal skaliert werden; der Speicher skaliert automatisch.

Wartung

Erfordert manuelle VACUUM- und ANALYZE-Befehle

Vollständig verwaltet; Wartungsaufgaben sind automatisiert und werden im Hintergrund ausgeführt.

Anhang 2: Zuordnung von Datentypen

Amazon RedShift

Snowflake

Anmerkungen

SMALLINT

SMALLINT / NUMBER(5,0)

INTEGER

INTEGER / NUMBER(10,0)

BIGINT

BIGINT / NUMBER(19,0)

DECIMAL(p,s) / NUMERIC(p,s)

NUMBER(P,S)

REAL / FLOAT4

FLOAT

DOUBLE PRECISION / FLOAT8

FLOAT

BOOLEAN

BOOLEAN

CHAR(n)

CHAR(n) / VARCHAR(n)

Snowflake füllt CHAR mit Leerzeichen auf; VARCHAR wird daher häufig bevorzugt.

VARCHAR(n)

VARCHAR(n)

Die maximale Länge in Snowflake beträgt 16MB.

DATE

DATE

TIMESTAMP

TIMESTAMP_NTZ

Snowflake trennt Zeitstempel mit und ohne Zeitzonen.

TIMESTAMPTZ

TIMESTAMP_TZ

GEOMETRY

GEOGRAPHY / GEOMETRY

Snowflake bietet native Unterstützung von Geodaten.

SUPER

VARIANT

Für semistrukturierte Daten (JSON).

Anhang 3: SQL- und Funktionsunterschiede

Amazon RedShift

Snowflake

Anmerkungen

GETDATE()

CURRENT_TIMESTAMP()

Snowflake bietet mehrere Funktionen für das aktuelle Datum/die aktuelle Uhrzeit.

SYSDATE

CURRENT_TIMESTAMP()

SYSDATE ist ein Alias für GETDATE in RedShift

LISTAGG(Ausdruck, Trennzeichen)

LISTAGG(Ausdruck, Trennzeichen)

Die Syntax ist ähnlich, aber das Sortierverhalten kann unterschiedlich sein.

NVL(Ausdruck1, Ausdruck2)

NVL(Ausdruck1, Ausdruck2) / IFNULL(Ausdruck1, Ausdruck2)

Die Funktionalität ist identisch.

DECODE(Ausdruck, Suche, Ergebnis …)

DECODE(Ausdruck, Suche, Ergebnis …)

Wird in beiden unterstützt. CASE-Anweisungen sind standardmäßiger.

DATEDIFF(Teil, Anfang, Ende)

DATEDIFF(Teil, Anfang, Ende)

Wird unterstützt, aber Datums-/Uhrzeitkomponenten können unterschiedliche Namen haben (z. B. Jhr. vs. Jahr).

DATEADD(Teil, Zahl, Datum)

DATEADD(Teil, Zahl, Datum)

Wird unterstützt, aber Datums-/Uhrzeitkomponenten können unterschiedliche Namen haben.

Gespeicherte Prozeduren

PL/pgSQL

Snowflake Scripting (SQL), JavaScript, Python, Java

DDL-Klauseln

DISTKEY, SORTKEY, ENCODE

Keine. Ersetzt durch automatische Mikropartitionierung und optionale Gruppierungsschlüssel.

Wartung

VACUUM, ANALYZE

Keine. Automatisierte Hintergrunddienste übernehmen die Wartung.

Laden von Daten

UNLOAD, COPY

COPY INTO, Snowpipe