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 de la base de datos
- Conecta Redshift a Klaviyo y crea una sincronización programada de perfiles
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 2 esquemas en la base de datos de Redshift que usarás 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)
Ejecuta estas sentencias como administrador de Redshift en la base de datos que preparaste. Estas concesiones se aplican a tablas y vistas existentes. Concede acceso a nuevas tablas o vistas de origen antes de añadirlas a una sincronización.
-- 1) 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;
-- 2) Read-only access to existing tables and views in 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 and views in the future
-- Alternatively, grant SELECT on each specific source table or view:
-- GRANT SELECT ON TABLE klaviyo_import_from_dwh.example_view_name TO ROLE klaviyo_data_transfer_role;(Opcional) Comprueba la configuración
Conéctate a la base de datos que preparaste como usuario de Klaviyo Service y, a continuación, ejecuta estas comprobaciones. Sustituye EXAMPLE_TABLE por una tabla o vista de origen que tengas previsto sincronizar. Estas comprobaciones no sustituyen al paso Probar conexión en Klaviyo.
-- 1) Validate create/read access in KLAVIYO_TMP
-- Use a new test table name if klaviyo_permission_check already exists
CREATE TABLE klaviyo_tmp.klaviyo_permission_check (id INT);
INSERT INTO klaviyo_tmp.klaviyo_permission_check VALUES (1);
SELECT COUNT(*) FROM klaviyo_tmp.klaviyo_permission_check; -- expect 1
DROP TABLE klaviyo_tmp.klaviyo_permission_check;
-- 2) Confirm visibility of source tables and views
SELECT DISTINCT table_name FROM information_schema.columns
WHERE table_schema = 'klaviyo_import_from_dwh'
ORDER BY table_name
LIMIT 25;
-- 3) Confirm SELECT on a source table or view
SELECT * FROM klaviyo_import_from_dwh.EXAMPLE_TABLE LIMIT 1;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/32Prepara las 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). Utiliza una columnaTIMESTAMPoTIMESTAMPTZcon un valor para cada fila. Las columnas de texto y DATE no están disponibles para la detección de cambios. - 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: Incluye al menos 1 identificador de perfil (
email,phone,external_id, etc.). Usa identificadores coherentes en todas las tablas de importación para evitar perfiles 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 una clave de ordenación en la columna de marca de tiempo para realizar lecturas incrementales eficientes.
- Vistas: puedes importar desde tablas o vistas, siempre que una
SELECTsimple funcione para el usuario de Klaviyo.
Conecta Redshift y crea una sincronización de perfil
- En Klaviyo, ve a Avanzado > Gestión de datos > Sincronización.
- Si ya tienes una conexión configurada, haz clic en Crear sincronización. Si esta es tu primera conexión, continúa con el siguiente paso.
- Selecciona Importar datos desde tu almacén de datos.
- Elige Amazon Redshift.
- Haz clic en Conectar con Redshift e introduce los siguientes datos de conexión:
Campo | Descripción |
|---|---|
Nombre | Introduce un nombre, como el nombre de tu base de datos de Redshift. |
URL del 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 |
- Haz clic en Siguiente para abrir Probar conexión y, a continuación, haz clic en Probar. Klaviyo comprueba la conexión, los esquemas necesarios y los permisos del entorno de prueba y, a continuación, muestra las tablas y vistas accesibles en
klaviyo_import_from_dwh. Para continuar, debe haber disponible al menos 1 fuente. Cuando la prueba se complete correctamente y haya una fuente disponible, haz clic en Siguiente. - Introduce un nombre de sincronización único en Nombre, selecciona la tabla o vista en Fuente de datos y selecciona Perfiles en Tipos de objetos de datos.
- En Cadence, selecciona Programar ejecución. Elige el intervalo en Cada y, a continuación, configura Fecha de inicio, Hora de inicio y Zona horaria. Haz clic en Siguiente.
- En Asignar propiedades, selecciona la columna de marca de tiempo en Detección de cambios > Detección de nuevas filas. Asigna al menos 1 identificador de perfil y las propiedades de perfil que quieras importar. Elimina las asignaciones de las columnas que no quieras importar. Tampoco puedes asignar la columna de detección de cambios a una propiedad de perfil.
- Haz clic en Listo para guardar la conexión y sincronizar. Klaviyo te devuelve a Sincronizando y la sincronización se ejecuta según la programación que seleccionaste.
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
- Rota la contraseña del usuario de servicio con regularidad y después de cambios en el personal. Después de cambiar la contraseña en Redshift, actualízala en la pestaña Configuración de la conexión de Klaviyo y haz clic en Guardar.
- Limita el usuario de Klaviyo a los 2 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 2 esquemas y concede acceso en cada base de datos; luego, crea una conexión de Redshift independiente en Klaviyo para cada base de datos. Añade syncs independientes para las tablas o vistas de origen dentro de cada conexión.
¿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)