Leitfaden zur Optimierung von Snowflake-Ereignistabellen
Übersicht
Diese Anleitung führt dich durch zwei empfohlene Snowflake-Optimierungen für die Klaviyo-Ereignistabelle. Diese Änderungen sollen umfassende Tabellenscans reduzieren und Snowflake dabei helfen, sich während der Synchronisierung auf die relevanten Ereignisdatensätze und Zeiträume zu konzentrieren.
- Aktiviere die Suchoptimierung für Gleichheits-Lookups auf id. Dafür ist Snowflake Enterprise Edition oder höher erforderlich.
- Cluster die Ereignistabelle nach dem Ereignisdatum. Das funktioniert in jeder Snowflake-Edition und sollte unabhängig davon durchgeführt werden, ob du auch den Schritt zur Suchoptimierung abschließen kannst.
Bevor du anfängst
Bestätige Folgendes mit deinem Data-Platform-Team:
- Unabhängig davon, ob dein Snowflake-Konto Enterprise Edition oder höher ist, wenn du planst, Schritt 3 (Suchoptimierung) abzuschließen. Clustering in Schritt 4 funktioniert in jeder Snowflake-Edition und sollte unabhängig davon durchgeführt werden.
- Du hast die Berechtigung, die Ereignistabelle zu ändern und Funktionen zur Optimierung auf Tabellenebene zu aktivieren.
- Du kennst den voll qualifizierten Namen der Klaviyo-Ereignistabelle in deiner Umgebung.
- Die Ereignistabelle enthält eine id-Spalte, und die Ereigniszeitstempelspalte heißt DATETIME oder hat einen gleichwertigen Namen.
- Du hast ein geplantes Testfenster, insbesondere wenn gerade eine historische Synchronisierung läuft.
Die Tabellennamen in diesem Leitfaden sind Beispiele. Ersetze <EVENTS_TABLE> durch den genauen Datenbank-, Schema- und Tabellennamen in deinem Konto.
Schritt 1: Ereignistabelle identifizieren und validieren
- Öffne ein Snowflake-Worksheet mit einer Rolle mit den erforderlichen Berechtigungen.
- Bestätige die genaue Tabellenkennung, die von deiner Klaviyo-Integration verwendet wird.
- Verifiziere, dass die Tabelle die erwarteten Lookup- und Zeitstempelspalten enthält.
Zum Beispiel:
DESCRIBE TABLE <EVENTS_TABLE>; Bestätige Folgendes:
- id ist der Ereignisbezeichner, der für Gleichheits-Lookups verwendet wird.
- DATETIME ist der Zeitstempel des Ereignisses, oder identifiziere die entsprechende Zeitstempelspalte, die du im Clustering-Ausdruck verwenden kannst.
Schritt 2: Eine Baseline erfassen (optional)
Bevor du die Änderungen anwendest, erfasse genügend Informationen, um die Ergebnisse danach vergleichen zu können:
- Aktueller Synchronisierungsstatus und -dauer.
- Ob die Synchronisierung historisch oder inkrementell ist.
- Für die Integrationen verwendetes Snowflake-Warehouse.
- Ungefähre Credits oder Compute-Nutzung durch die jüngsten Sync-Aktivitäten.
- Alle relevanten Query-IDs, Fehlermeldungen oder Zeitstempel aus der Snowflake-Query-Historie.
Wenn eine historische Synchronisierung ungewöhnlich lange läuft, stimme dich mit Klaviyo ab, bevor du sie pausierst oder neu startest.
Schritt 3: Search Optimization für die Ereignis-ID aktivieren (optional)
Die Suchoptimierung erfordert Snowflake Enterprise Edition oder höher. Wenn dein Konto die Standard Edition nutzt, überspringe diesen Schritt und fahre mit Schritt 4 fort – Clustering erfordert keine Edition und sollte unabhängig davon durchgeführt werden.
Führe die folgende Anweisung aus, nachdem du den Platzhalter durch deinen tatsächlichen Tabellennamen ersetzt hast:
ALTER TABLE <EVENTS_TABLE>
ADD SEARCH OPTIMIZATION ON EQUALITY(id); Wenn die Tabelle beispielsweise klaviyo_events heißt:
ALTER TABLE klaviyo_events
ADD SEARCH OPTIMIZATION ON EQUALITY(id); Dadurch wird ein optimierter Zugriffspfad für Gleichheitsprädikate auf id erstellt, der dazu dienen soll, die Menge zu reduzieren, die Snowflake für gezielte Lookups aus der Ereignistabelle scannen muss.
Wenn die Suchoptimierung bereits für die ID aktiviert ist, erstelle keine doppelte Konfiguration. Bestätige stattdessen die vorhandene Konfiguration mit deiner Snowflake-Administrator*in.
Schritt 4: Datumsbasiertes Clustering zur Ereignistabelle hinzufügen
Einen Clustering-Schlüssel basierend auf dem Datumsanteil des Ereignis-Zeitstempels anwenden:
ALTER TABLE <EVENTS_TABLE>
CLUSTER BY (TO_DATE(DATETIME)); Zum Beispiel:
ALTER TABLE KLAVIYO_EVENT
CLUSTER BY (TO_DATE(DATETIME)); Verwende die in Schritt 1 bestätigte Zeitstempelspalte. Wenn deine Spalte einen anderen Namen hat, ersetze diese Spalte im Ausdruck.
Die datumsbasierte Clusterbildung soll Snowflake dabei helfen, nicht zusammenhängende Zeiträume auszusortieren, statt die gesamte Ereignistabelle zu scannen.
Schritt 5: Snowflake-Wartung abschließen lassen
Nachdem beide Anweisungen erfolgreich ausgeführt wurden:
- Gib Snowflake Zeit, um die Such- und Clustering-Strukturen zu erstellen oder zu pflegen.
- Beurteile das Ergebnis nicht sofort anhand der ersten Abfrage direkt nach den DDL-Anweisungen.
- Überwache weiterhin die Warehouse-Nutzung und die Abfrageleistung, während die Tabelle gewartet wird.
Der erforderliche Zeitaufwand hängt von der Tabellengröße, dem bestehenden Datenlayout und der Snowflake-Auslastung ab.
Schritt 6: Klaviyo benachrichtigen
Sende Klaviyo die folgenden Details:
- Der vollständig qualifizierte Name der Ereignistabelle.
- Der Zeitstempel, wann jede Anweisung angewendet wurde.
- Bestätigung, dass die Suchoptimierung für die ID aktiviert wurde.
- Bestätigung, dass datumsbasiertes Clustering angewendet wurde.
- Das Snowflake-Konto/die Region und das Warehouse, das für die Synchronisierung verwendet wird.
- Alle relevanten Sync-ID-, Query-ID- oder Fehlerdetails.
Klaviyo prüft, ob eine exportseitige Konfiguration erforderlich ist, um die Optimierung der Ereignistabelle vollständig zu nutzen.
Schritt 7: Einen kontrollierten Validierungssync ausführen (optional)
Wenn möglich, validiere mit einer inkrementellen oder anderweitig eingeschränkten Synchronisierung, bevor du einen großen historischen Backfill neu startest.
Vergleiche den neuen Durchlauf mit der Baseline aus Schritt 2:
- Zeit, mit der Verarbeitung zu beginnen.
- Gesamtdauer der Synchronisierung.
- Verhalten des Fortschritts in der Klaviyo-UI.
- Gescannte Snowflake-Bytes.
- Verbrauchte Warehouse-Credits.
- Ob die Synchronisierung ohne erneute Versuche oder wiederholte Arbeit abgeschlossen wird.
Das stärkste Signal ist eine Verbesserung sowohl bei der Sync-Dauer als auch beim Snowflake-Compute, statt eine Metrik isoliert zu betrachten.
Schritt 8: Die nächsten Synchronisierungen überwachen
Verfolge mehrere aufeinanderfolgende Synchronisierungen, statt dich auf einen einzelnen Durchlauf zu verlassen. Suche nach:
- Stabile oder sinkende Rechenleistung, während die Ereignistabelle wächst.
- Weniger breit angelegte Scans historischer Daten.
- Besser vorhersehbare Synchronisierungsdauer.
- Keine Zunahme fehlgeschlagener oder wiederholter Abfragen.
Teile die Ergebnisse mit Klaviyo, einschließlich Query-IDs vor und nach der Änderung, wenn verfügbar.
Fehlerbehebung
Die Suchoptimierungsanweisung schlägt fehl.
Überprüfe Folgendes:
- Das Snowflake-Konto unterstützt die Funktion.
- Die ausführende Rolle hat die Berechtigung, die Tabelle zu ändern.
- Der Tabellenname und die ID-Spalte sind korrekt.
- Die Suchoptimierung ist für die angeforderte Spalte noch nicht konfiguriert.
Die Clustering-Anweisung schlägt fehl
Überprüfe Folgendes:
- Der Tabellenname ist korrekt.
- Die Zeitstempelspalte ist vorhanden und ist ein kompatibler Zeitstempel- oder Datumswert.
- Die ausführende Rolle kann die Tabelle ändern.
- Der Clustering-Ausdruck entspricht dem tatsächlichen Ereignis-Zeitstempelfeld.
Die Synchronisierung ist weiterhin langsam oder scheint festzustecken
An Klaviyo senden:
- Die exakten Tabellendefinitionen und verwendeten Anweisungen.
- Der Zeitpunkt, zu dem jede Änderung angewendet wurde.
- Die Startzeit der Synchronisierung und den aktuellen Status.
- Snowflake-Abfrage-IDs und Warehouse-Nutzung.
- Jeglichen Hinweisen darauf, dass der UI-Status nicht weiter voranschreitet.
Entferne die Optimierungen nicht ausschließlich, weil sich die erste Synchronisierung nicht verbessert. Bestätige zuerst, dass Snowflake die relevanten Wartungsarbeiten abgeschlossen hat und dass Klaviyo seine exportseitige Konfiguration überprüft hat.
Checkliste für den Abschluss
- Korrekte Ereignistabelle identifiziert.
- Spalten für id und Ereigniszeitstempel bestätigt.
- Baseline-Sync und berechnete Metriken aufgezeichnet (optional).
- Für Gleichheitsabfragen auf id ist die Suchoptimierung aktiviert (optional).
- Ereignistabelle nach Ereignisdatum gruppiert.
- Klaviyo über die Änderungen benachrichtigt.
- Kontrollierte Validierungs-Synchronisierung abgeschlossen.
- Follow-up-Synchronisierungsleistung und Compute überprüft (optional).