Klaviyo und Redshift verbinden
Advanced Klaviyo Data Platform ist nicht in der Standard-Marketing-Anwendung von Klaviyo enthalten, und für den Zugriff auf die zugehörigen Funktionen ist ein Abonnement erforderlich. In unserem Abrechnungsleitfaden erfährst du, wie du diesen Plan kaufen kannst.
Übersicht
Dieser Leitfaden führt Redshift-Administrator*innen durch die Vorbereitung von Amazon Redshift für Klaviyo, die Vergabe der minimal erforderlichen Zugriffsrechte und das Abschließen der Verbindung, sodass Profildaten nach Zeitplan importiert werden können. Du lernst, wie du:
- Die
KLAVIYO_TMP- undKLAVIYO_IMPORT_FROM_DWH-Schemas erstellen - Erstelle eine*n dedizierte*n Service-User*in für Klaviyo
- Least-Privilege-Berechtigungen vergeben
- (Optional) Berechtigungen und Konnektivität validieren
- Verbinde Redshift mit Klaviyo und beginne mit dem Erstellen von Syncs
Für Hintergrundinformationen dazu, wie der Data-Warehouse-Import funktioniert – einschließlich unterstützter Objekte und Best Practices für die Tabellenstruktur – siehe Data-Warehouse-Import in Klaviyo verstehen.
Erforderliche Schemas erstellen
Erstelle zwei Schemas in der Datenbank, die Redshift für Klaviyo verwenden wird:
-- Run as a Redshift DB admin or a role with CREATE SCHEMA
CREATE SCHEMA IF NOT EXISTS klaviyo_import_from_dwh;
CREATE SCHEMA IF NOT EXISTS klaviyo_tmp; KLAVIYO_IMPORT_FROM_DWH– Platziere hier deine finalen, synchronisationsbereiten Tabellen oder Views. Während der Einrichtung listet Klaviyo Objekte in diesem Schema auf, aus denen du auswählen kannst. Nimm daher nur die Tabellen auf, die du importieren möchtest.KLAVIYO_TMP– Wird ausschließlich von Klaviyo für temporäre/Staging-Tabellen während Sync-Jobs verwendet. Ändere die Daten hier nicht – Klaviyo verwaltet und bereinigt dieses Schema automatisch.
Erstelle den Klaviyo Service-Benutzer
Erstelle für Klaviyo einen dedizierten Datenbankbenutzer mit einem starken Passwort, das du unabhängig rotieren kannst.
-- Replace with your own names and a strong password
CREATE USER klaviyo_data_transfer_user WITH PASSWORD 'REPLACE_WITH_STRONG_PASSWORD'; Erstelle eine Rolle, um Berechtigungen für die Service-Nutzer*in zu verwalten:
CREATE ROLE klaviyo_data_transfer_role;
GRANT ROLE klaviyo_data_transfer_role TO klaviyo_data_transfer_user; Benutzername und Passwort sicher speichern – sie werden beim Verbinden von Klaviyo mit Redshift benötigt.
Erforderliche Berechtigungen erteilen (Least Privilege)
-- 1) Allow temporary tables
GRANT TEMPORARY ON DATABASE your_database TO ROLE klaviyo_data_transfer_role;
-- 2) Permissions on the staging schema Klaviyo manages
GRANT USAGE ON SCHEMA klaviyo_tmp TO ROLE klaviyo_data_transfer_role;
GRANT CREATE ON SCHEMA klaviyo_tmp TO ROLE klaviyo_data_transfer_role;
-- 3) Read-only access to your import schema
GRANT USAGE ON SCHEMA klaviyo_import_from_dwh TO ROLE klaviyo_data_transfer_role;
GRANT SELECT ON ALL TABLES IN SCHEMA klaviyo_import_from_dwh TO ROLE klaviyo_data_transfer_role;
-- Remember to grant access to new tables in the future
-- 3a) Grant SELECT on specific views (repeat as needed)
GRANT SELECT ON VIEW klaviyo_import_from_dwh.example_view_name TO ROLE klaviyo_data_transfer_role; (Optional) Einrichtung überprüfen
Führe als Klaviyo-Nutzer*in ein paar schnelle Prüfungen durch, um zu bestätigen, dass die Berechtigungen korrekt sind.
-- Switch to the target database
SET search_path TO klaviyo_tmp;
-- 4.1 Validate create/read in KLAVIYO_TMP
CREATE TABLE IF NOT EXISTS permission_check (id INT);
INSERT INTO permission_check VALUES (1);
SELECT COUNT(*) FROM permission_check; -- expect 1
DROP TABLE permission_check;
-- 4.2 Confirm visibility of import tables
SET search_path TO klaviyo_import_from_dwh;
SELECT tablename FROM pg_table_def
WHERE schemaname = 'klaviyo_import_from_dwh'
LIMIT 25;
-- 4.3 Confirm SELECT on a source table or view
SELECT * FROM klaviyo_import_from_dwh.EXAMPLE_TABLE; Netzwerkzugriff
Klaviyo muss deinen Redshift-Endpunkt erreichen können.
- Öffentlicher Redshift-Endpunkt: Whitelist der allgemeingültigen IPs von Klaviyo in deiner Firewall oder Sicherheitsgruppe.
- Privater Endpunkt (z. B. PrivateLink): Konnektivität über deinen internen Netzwerkpfad und deine Sicherheitsrichtlinien sicherstellen.
Wenn Sicherheitsgruppen verwendet werden, eingehenden Zugriff auf den Redshift-Port (Standard: 5439) für Klaviyo’s IP-Bereiche zulassen:
184.72.183.187/32
52.206.71.52/32
3.227.146.32/32
44.198.39.11/32
35.172.58.121/32
3.228.37.244/32
54.88.219.8/32
3.214.211.176/32 Deine Importtabellen vorbereiten (Struktur und Performance)
Stelle sicher, dass alle Tabellen, die du importieren möchtest, diese Konventionen befolgen, um genaue, effiziente inkrementelle Synchronisierungen zu gewährleisten:
- Zeitstempelspalte: Füge einen Zeitstempel für die Erstellung oder letzte Aktualisierung pro Zeile ein (z. B.
inserted_at,updated_at,modified_at). - Monotone Updates: Der Zeitstempel sollte jedes Mal steigen, wenn sich eine Zeile ändert.
- Zeitzone: UTC verwenden oder Zeitzoneninformationen angeben. Wenn diese fehlen, geht Klaviyo von UTC aus.
- Konsistente Identifikatoren: Verwende in Importtabellen dieselben Profil-Identifikatoren (
email,phone,external_idusw.), um Duplikate zu vermeiden. - Einwilligungsformate: Befolge beim Synchronisieren von Einwilligungsdaten dieselben gültigen Werte/Formate wie bei Datei- oder SFTP-Uploads.
- Leistung: Erwäge Sortier- oder Dist-Schlüssel für deine Zeitstempelspalte, um effiziente inkrementelle Lesevorgänge zu ermöglichen.
- Views: Du kannst aus Tabellen oder Views importieren, solange eine einfache
SELECTfür die*den Klaviyo-Benutzer*in funktioniert.
Redshift mit Klaviyo verbinden
- Öffne in Klaviyo die linke Seitenleiste und gehe zu Advanced → Syncing.
- Klicke auf Synchronisierung erstellen.
- Wähle Daten aus deinem Data Warehouse importieren aus.
- Wähle Redshift aus.
- Klicke auf Mit Redshift verbinden und gib die folgenden Verbindungsdetails ein:
Feld | Beschreibung |
|---|---|
Host | Dein Redshift-Endpunkt (z. B. |
Port | 5439 (oder dein benutzerdefinierter Port) |
Datenbank | Die Datenbank mit |
Benutzername/Passwort | Die Anmeldedaten für den Klaviyo Service-User |
Nachdem du eine Verbindung hergestellt hast, testet Klaviyo deine Anmeldedaten und die Netzwerkverbindung. Nach der Verifizierung kannst du Syncs erstellen und Tabellen oder Ansichten aus klaviyo_import_from_dwh auswählen.
Tipps zur Fehlerbehebung
Verbindungstest fehlgeschlagen
- Stelle sicher, dass Firewall- oder Sicherheitsgruppenregeln Klaviyos IPs erlauben, deinen Redshift-Endpunkt über den richtigen Port zu erreichen.
- Bestätige die SSL-Einstellungen und dass du den richtigen Endpunkt (Cluster vs. Workgroup), die Region und den Port verwendest.
Tabellen werden nicht angezeigt
- Stelle sicher, dass sich Tabellen in
klaviyo_import_from_dwhbefinden. - Bestätige, dass der Klaviyo-Benutzer
USAGEim Schema undSELECTin den Tabellen oder Views hat.
Keine neuen Zeilen werden synchronisiert
- Überprüfe, ob deine Zeitstempelspalte bei Zeilenänderungen aktualisiert wird und UTC verwendet oder Zeitzoneninformationen enthält.
Berechtigungsfehler zur Laufzeit
- Führe das Validierungs-SQL als Klaviyo-Nutzer*in erneut aus.
- Falls nötig, Berechtigungen oder Standardprivilegien erneut anwenden.
Sicherheit und Wartung
- Ändere das Passwort der Service-Nutzer*in regelmäßig und nach Personalwechseln.
- Beschränke die*n Klaviyo-Benutzer*in auf die beiden oben genannten Schemas und gewähre
USAGEnur dort, wo es erforderlich ist. - Halte ein einfaches Runbook bereit, in dem deine genauen
GRANT-Anweisungen und die IP-Bereiche dokumentiert sind, die du auf die Allowlist gesetzt hast.
FAQ
Kann ich aus mehreren Redshift-Datenbanken importieren?
Ja. Erstelle die beiden Schemas in jeder Datenbank und verbinde Objekte aus jeder Datenbank als separate Syncs.
Kann ich materialisierte Views verwenden?
Ja. SELECT auf der materialisierten View für die*n Klaviyo-Benutzer*in gewähren.
Anhang: Beispiel-DDL für eine einfache Importtabelle
CREATE TABLE klaviyo_import_from_dwh.profile_base (
external_id VARCHAR(128),
email VARCHAR(320),
phone VARCHAR(32),
first_name VARCHAR(128),
last_name VARCHAR(128),
country VARCHAR(64),
inserted_at TIMESTAMP
);
-- ensure monotonically increasing timestamp on inserts/updates
-- (use your ETL/ELT to set inserted_at = GETDATE() at load time)