Conectar Klaviyo y Redshift
Advanced Klaviyo Data Platform no está incluido en la aplicación de marketing estándar de Klaviyo, y se requiere una suscripción para acceder a las funciones asociadas. Consulta nuestra guía de facturación para saber cómo adquirir este plan.
Introducción
Esta guía explica a los administradores de Redshift cómo preparar Amazon Redshift para Klaviyo, conceder el acceso mínimo necesario y completar la conexión para que puedas importar datos de perfiles según un calendario. Aprenderás a:
- Crea los esquemas
KLAVIYO_TMPyKLAVIYO_IMPORT_FROM_DWH - Crea un usuario de servicio dedicado para Klaviyo
- Concede permisos con el mínimo privilegio
- (Opcional) Validar los permisos y la conectividad
- Conecta Redshift con Klaviyo y empieza a crear sincronizaciones
Si quieres información de fondo sobre cómo funciona la importación de almacén de datos (incluidos los objetos compatibles y las prácticas recomendadas para la estructura de tablas), consulta Entender la importación de almacén de datos en Klaviyo.
Crea los esquemas obligatorios
Crea dos esquemas en la base de datos que Redshift utilizará para Klaviyo:
-- 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: coloca aquí tus tablas o vistas finales listas para sincronizar. Durante la configuración, Klaviyo enumera los objetos de este esquema para que elijas, así que incluye solo las tablas que planeas importar.KLAVIYO_TMP– Usado exclusivamente por Klaviyo para tablas temporales/de fase de preparación durante los trabajos de sincronización. No modifiques los datos aquí (Klaviyo gestiona y limpia este esquema automáticamente).
Crea el usuario de servicio de Klaviyo
Crea un usuario de base de datos dedicado para Klaviyo con una contraseña segura que puedas rotar de forma independiente.
-- Replace with your own names and a strong password
CREATE USER klaviyo_data_transfer_user WITH PASSWORD 'REPLACE_WITH_STRONG_PASSWORD'; Crea un rol para gestionar las concesiones del usuario de servicio:
CREATE ROLE klaviyo_data_transfer_role;
GRANT ROLE klaviyo_data_transfer_role TO klaviyo_data_transfer_user; Guarda el nombre de usuario y la contraseña de forma segura (los usarás al conectar Klaviyo con Redshift).
Conceder los permisos necesarios (mínimo privilegio)
-- 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; (Opcional) Comprueba la configuración
Ejecuta algunas comprobaciones rápidas como el usuario de Klaviyo para confirmar que las concesiones son correctas.
-- 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; Acceso a la red
Klaviyo debe poder acceder a tu punto de conexión de Redshift.
- Punto de conexión público de Redshift: añade a la lista de permitidos las IP estáticas de Klaviyo en tu firewall o grupo de seguridad.
- Punto de conexión privado (p. ej., PrivateLink): asegúrate de que la conectividad se realiza a través de la ruta de red interna y las políticas de seguridad.
Si usas grupos de seguridad, permite el acceso entrante en tu puerto de Redshift (valor predeterminado 5439) para los rangos de IP de Klaviyo:
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 Prepara tus tablas de importación (estructura y rendimiento)
Asegúrate de que todas las tablas que tengas previsto importar sigan estas convenciones para que las sincronizaciones incrementales sean precisas y eficientes:
- Columna de marca de tiempo: Incluye una marca de tiempo de creación o de última actualización por fila (p. ej.,
inserted_at,updated_at,modified_at). - Actualizaciones monótonas: la marca de tiempo debe aumentar cada vez que cambie una fila.
- Zona horaria: usa UTC o incluye información de zona horaria. Si falta, Klaviyo asume UTC.
- Identificadores coherentes: Usa los mismos identificadores de perfil (
email,phone,external_id, etc.) en todas las tablas de importación para evitar duplicados. - Formatos de consentimiento: al sincronizar los datos de consentimiento, sigue los mismos valores/formatos válidos que se usan en las cargas de archivos o SFTP.
- Rendimiento: considera claves de ordenación o de distribución en la columna de marca de tiempo para lecturas incrementales eficientes.
- Vistas: puedes importar desde tablas o vistas, siempre que una
SELECTsimple funcione para el usuario de Klaviyo.
Conectar Redshift con Klaviyo
- En Klaviyo, abre la barra lateral izquierda y ve a Avanzado → Sincronización.
- Haz clic en Crear sincronización.
- Selecciona Importar datos desde tu almacén de datos.
- Elige Redshift.
- Haz clic en Conectar con Redshift e introduce los siguientes datos de conexión:
Campo | Descripción |
|---|---|
Host | Tu punto de conexión de Redshift (p. ej., |
Puerto | 5439 (o tu puerto personalizado) |
Base de datos | La base de datos que contiene |
Nombre de usuario/Contraseña | Las credenciales de usuario de Klaviyo Service |
Después de conectarte, Klaviyo probará tus credenciales y la conectividad de red. Una vez verificado, puedes crear sincronizaciones y seleccionar tablas o vistas de klaviyo_import_from_dwh.
Consejos para solucionar problemas
Fallo en la prueba de conexión
- Comprueba que las reglas del firewall o del grupo de seguridad permitan que las IP de Klaviyo lleguen a tu punto de conexión de Redshift en el puerto correcto.
- Confirma la configuración de SSL y que estás usando el punto de conexión correcto (clúster frente a grupo de trabajo), la región y el puerto.
Las tablas no aparecen
- Asegúrate de que las tablas estén en
klaviyo_import_from_dwh. - Confirma que el usuario de Klaviyo tenga
USAGEen el esquema ySELECTen las tablas o vistas.
No se sincronizan filas nuevas
- Comprueba que tu columna de marca de tiempo se actualice cuando cambien las filas y use UTC o incluya información de zona horaria.
Errores de permisos en el tiempo de ejecución
- Vuelve a ejecutar la validación SQL como el usuario de Klaviyo.
- Vuelve a aplicar los permisos o los privilegios predeterminados si es necesario.
Seguridad y mantenimiento
- Rotar la contraseña del usuario de servicio con regularidad y tras cambios de personal.
- Limita el usuario de Klaviyo a los dos esquemas anteriores y concede
USAGEsolo cuando sea necesario. - Mantén un runbook sencillo en el que se documenten tus declaraciones
GRANTexactas y los rangos de IP que has incluido en la allowlist.
PREGUNTAS FRECUENTES
¿Puedo importar desde varias bases de datos de Redshift?
Sí. Crea los dos esquemas en cada base de datos y conecta objetos de cada una como sincronizaciones independientes.
¿Puedo usar vistas materializadas?
Sí. Concede SELECT en la vista materializada al usuario de Klaviyo.
Apéndice: ejemplo de DDL para una tabla de importación sencilla
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)