La Plataforma de Datos Avanzada Klaviyo no está incluida en la aplicación de marketing estándar de Klaviyo, y se requiere una suscripción para acceder a la funcionalidad asociada. Visita nuestra guía de facturación para saber cómo contratar este plan.

 

A efectos de este artículo utilizamos el término "tabla", pero las vistas, las vistas materializadas y las tablas son todos objetos Snowflake válidos que pueden importarse. Mientras Klaviyo pueda ejecutar SELECT col1 FROM nombre_tabla en el objeto, eres libre de utilizar lo que prefieras. 

Las palabras clave "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", y "OPTIONAL" de este documento deben interpretarse como se describe en la RFC 2119.

Configuración de Snowflake Administrador

Configuración de Snowflake Administrador

Esta sección describe los pasos que debes seguir en tu entorno Snowflake para que Klaviyo pueda importar tus datos. 

  1. Genera una clave privada ejecutando el siguiente comando en tu terminal local:
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
  1. Genera una clave pública que haga referencia a la clave privada ejecutando el siguiente comando en tu terminal:
openssl rsa -in clave_rsa.p8 -pubout -out clave_rsa.pub
  1. Copia el archivo rsa_key.pub y pégalo en el script que aparece a continuación para sustituir el valor del marcador de posición 'GENERATE_PUBLIC_KEY' de user_rsa_public_key. El script que aparece a continuación funcionará para los usuarios de Mac, o si lo prefieres, puedes abrir rsa_key.pub en un IDE y copiar el contenido completo del archivo. 
# Comando de terminal Mac para escribir la clave en tu terminal y copiarla en el portapapeles
cat rsa_key.pub | tee /dev/tty | pbcopy
  1. Ejecuta el siguiente script en tu entorno Snowflake para crear un usuario de servicio para que lo utilice Klaviyo. Debes tener privilegios de securityadmin y sysadmin para poder completar la configuración que se indica a continuación. Para revisar qué rol(es) tienes, ejecuta SHOW GRANTS TO USER y asegúrate de que tienes ambos roles en la <your_username> lista. acude a un administrador del sistema si necesitas que ajusten tu función.
    1. Puedes actualizar cualquiera de las variables establecidas al principio del script.
    2. En resumen
      1. Elige un almacén existente o crea uno nuevo
      2. Elige una base de datos existente o crea una nueva para albergar los nuevos esquemas
      3. Crea dos nuevos esquemas KLAVIYO_TMP, y KLAVIYO_IMPORT_FROM_DWH
      4. Crea una nueva política de red y permite la lista de IPs de Klaviyo
      5. Crear un usuario y un rol para Klaviyo
    3. Este script es idempotente (puede ejecutarse con seguridad varias veces), pero no sobrescribirá los objetos existentes con nombres conflictivos. 
BEGIN;

-- crear variables para usuario / contraseña / rol / almacén / base de datos. 
-- Cámbialos por lo que prefieras.
SET role_name = 'KLAVIYO_DATA_TRANSFER_ROLE'; -- todas las letras deben ser mayúsculas, ej. 'KLAVIYO_DATA_TRANSFER_ROLE'
SET nombre_usuario = 'KLAVIYO_DATA_TRANSFER_USER'; -- todas las letras deben ser mayúsculas, ej. 'KLAVIYO_DATA_TRANSFER_USER'
SET nombre_almacén = 'KLAVIYO_DATA_TRANSFER_WAREHOUSE'; -- todas las letras deben ser mayúsculas, ej. 'KLAVIYO_DATA_TRANSFER_WAREHOUSE'
SET nombre_base_de_datos = 'KLAVIYO_DATABASE'; -- todas las letras deben ser mayúsculas, ej. 'BASE_DE_DATOS_KLAVIYO'. Si esta base de datos no existe, se creará una nueva.
SET network_policy = 'KLAVIYO_DATA_TRANSFER_NETWORK_POLICY'; -- todas las letras deben ser mayúsculas, ej. 'KLAVIYO_NETWORK_POLICY'
SET network_rule = 'KLAVIYO_DATA_TRANSFER_NETWORK_RULE'; -- todas las letras deben ser mayúsculas, ej. 'KLAVIYO_NETWORK_RULE'
/* sustituye GENERATE_PUBLIC_KEY a continuación por la clave pública generada */

-- NO CAMBIAR
SET nombre_esquema_tmp = $nombre_base_de_datos || '.KLAVIYO_TMP'; -- NO CAMBIAR
SET nombre_esquema_import = $nombre_base_de_datos || '. KLAVIYO_IMPORT_FROM_DWH'; -- NO CAMBIAR
SET nombre_de_red_completa_tmp = $nombre_del_esquema_tmp || '.' || $regla_red; -- NO CAMBIAR
SET_regla_red_completa_import = $nombre_del_esquema_import || '.' || $regla_red; -- NO CAMBIAR


-- cambia el rol a sysadmin para los pasos de almacén / base de datos
USE ROLE sysadmin;

-- crea un almacén para el servicio de transferencia de datos
CREATE WAREHOUSE IF NOT EXISTS IDENTIFIER($nombre_almacén)
 tamaño_almacén = xpequeño
 tipo_almacén = estándar
 auto_suspender = 60
 auto_reanudar = verdadero
 inicialmente_suspendido = verdadero;

-- crear la base de datos para el servicio de transferencia de datos
CREATE DATABASE IF NOT EXISTS IDENTIFIER($nombre_base_datos);

-- crear esquemas para el servicio de transferencia de datos
CREATE SCHEMA IF NOT EXISTS IDENTIFIER($nombre_esquema_tmp);
CREAR ESQUEMA SI NO EXISTE IDENTIFICADOR($nombre_esquema_importar);

-- cambiar el rol a securityadmin para los pasos de usuario / rol
USE ROLE securityadmin;

-- crear red  regla y política para la base de datos
GRANT USAGE ON DATABASE IDENTIFIER($nombre_base_datos) TO ROLE securityadmin;
GRANT USAGE, CREATE NETWORK RULE ON SCHEMA IDENTIFIER($nombre_esquema_tmp) TO ROLE securityadmin;
GRANT USAGE, CREATE NETWORK RULE ON SCHEMA IDENTIFIER($nombre_del_esquema_import) TO ROLE securityadmin;

-- whitelist Klaviyo ip ranges, for KLAVIYO_TMP schema 
CREATE NETWORK RULE IF NOT EXISTS IDENTIFIER($full_network_rule_tmp)
 type = IPV4
 value_list = (
 '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'
 )
 comment = 'Klaviyo Rangos IP a partir de abril de 2025';
CREATE NETWORK POLICY IF NOT EXISTS IDENTIFIER($network_policy)
 allowed_network_rule_list = ($full_network_rule_tmp);

-- lista blanca Klaviyo rangos ip, para el esquema KLAVIYO_IMPORT_FROM_DWH 
CREATE NETWORK RULE IF NOT EXISTS IDENTIFIER($full_network_rule_import)
 type = IPV4
 value_list = (
 '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'
 )
 comment = 'Klaviyo IP Ranges as of April 2025';
CREATE NETWORK POLICY IF NOT EXISTS IDENTIFIER($network_policy)
allowed_network_rule_list = ($full_network_rule_import);


-- crear un rol para el servicio de transferencia de datos
CREATE ROLE IF NOT EXISTS IDENTIFIER($nombre_role);
GRANT ROLE IDENTIFIER($nombre_role) TO ROLE sysadmin;

-- crea un usuario para el servicio de transferencia de datos
CREATE USER IF NOT EXISTS IDENTIFIER($nombre_usuario)
 type = SERVICE
 network_policy = $network_policy
 default_role = $nombre_role
 default_warehouse = $nombre_almacén
 rsa_public_key = 'GENERATE_PUBLIC_KEY';
GRANT ROLE IDENTIFIER($nombre_role) TO USER IDENTIFIER($nombre_usuario);
ALTER USER IDENTIFIER($nombre_usuario) SET NETWORK_POLICY = $network_policy;

-- grant service role access to warehouse
GRANT USAGE
 ON WAREHOUSE IDENTIFIER($nombre_almacén)
 TO  ROLE IDENTIFIER($nombre_del_role);

-- concede acceso de servicio a la base de datos
GRANT monitorizar, USAGE
 ON DATABASE IDENTIFIER($nombre_de_la_base_de_datos)
 TO ROLE IDENTIFIER($nombre_del_role);

-- Concede privilegios para KLAVIYO_TMP 
GRANT USAGE ON SCHEMA IDENTIFIER($nombre_del_esquema_tmp) TO ROLE IDENTIFIER($nombre_del_role);
GRANT monitorizar, USAGE, CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE FUNCTION, CREATE PROCEDURE
 ON SCHEMA IDENTIFIER($nombre_del_esquema)
 TO ROLE IDENTIFIER($nombre_del_role);
GRANT ALL ON FUTURE TABLES IN SCHEMA IDENTIFIER($nombre_del_esquema) TO ROLE IDENTIFIER($nombre_del_role);

-- Concede privilegios para KLAVIYO_IMPORT_FROM_DWH
GRANT USAGE ON SCHEMA IDENTIFIER($nombre_del_esquema) TO ROLE IDENTIFIER($nombre_del_role);
GRANT SELECT
 ON FUTURAS TABLAS
 EN SCHEMA IDENTIFIER($nombre_esquema_importacion)
 TO ROLE IDENTIFIER($nombre_role);

COMMIT;
Configuración de datos en copo de nieve

Configuración de datos en copo de nieve

Arriba has creado dos esquemas nuevos. 

  • KLAVIYO_TMP será utilizado exclusivamente por Klaviyo. NO DEBES modificar ninguna tabla creada en este esquema. Klaviyo eliminará estas tablas cuando ya no sean necesarias.
  • KLAVIYO_IMPORT_FROM_DWH es donde debes tienda en línea tus tablas finales para que Klaviyo las importe. Cuando realices el proceso de creación de la sincronización, aparecerán todas las tablas de este esquema para que puedas elegir. Por lo tanto, sólo DEBERÍAS tienda en línea las tablas finales que quieras importar para evitar confusiones durante la configuración. 

Todas las tablas que plan importe a Klaviyo deben cumplir los siguientes criterios. 

Requisitos del sello de tiempo 

Requisitos del sello de tiempo 

  1. Las tablas DEBEN contener un campo de marca de tiempo que indique cuándo se creó o actualizó la fila. A menudo será insert_at o updated_at. Lo establecerás para cada tabla durante el proceso de creación de la sincronización.
    1. El campo marca de tiempo DEBE ser monotónicamente creciente (es decir, siempre debe aumentar o mantenerse igual, nunca disminuir).
    2. Tras la creación de la sincronización, NO DEBES establecer el valor de la marca de tiempo de una fila en un momento del pasado o Klaviyo podría no recoger esa fila.
    3. La zona horaria de este campo en particular no es importante para Klaviyo, siempre que sigas los requisitos anteriores
    4. Klaviyo RECOMIENDA que establezcas el campo timestamp con CURRENT_TIMESTAMP() o una función equivalente. Varias filas pueden tener la misma marca de tiempo. Véase el ejemplo siguiente. 
INSERT INTO nombre_tabla COMO 

SELECT ... 

, CURRENT_TIMESTAMP() AS inserted_at

... 
  1. Tus marcas de tiempo DEBEN estar en UTC, o incluir información sobre la zona horaria. Si falta información sobre la zona horaria, Klaviyo asumirá UTC. Para las propiedades personalizadas, estas marcas de tiempo permanecen en formato de cadena, lo que te permite interpretarlas en tu zona horaria preferida.
Estructura de la mesa 

Estructura de la mesa 

  1. Las tablas DEBERÍAN tratarse como "sólo añadir" (también conocidas como "sólo insertar")
    1. Si prefieres actualizar las filas en su lugar, DEBES actualizar el campo de marca de tiempo para que Klaviyo pueda identificar el cambio.
  2. Las tablas DEBERÍAN ordenarse según su columna de fecha y hora. Snowflake se encargará de la agrupación y partición en función de tu orden de inserción. Esto ayudará a optimizar las consultas de importación de Klaviyo, manteniendo bajos los costes de computación en Snowflake
Unicidad y coherencia del perfil 

Unicidad y coherencia del perfil 

  1. DEBES asegurarte de que cada Propiedades de perfil se importa de una sola fuente de datos (tabla). Klaviyo evita seleccionar la misma propiedad de diferentes tablas durante la creación de la sincronización, simplificando este requisito.
  2. DEBERÍAS utilizar los mismos identificadores de perfil (correo electrónico, número de teléfono, ID externo, etc.) en todas tus tablas de importación, para minimizar el riesgo de que se creen perfiles duplicados.
    1. Klaviyo creará un nuevo perfil si el identificador de perfil que proporcionas no coincide con un perfil existente dentro de Klaviyo.
    2. Ejemplo: Tabla1 (Email, fav_color) + Tabla2 (Teléfono, cumpleaños)
      1. Esto podría crear 2 perfiles para la misma persona si el perfil no existe actualmente. Si existe un perfil, Klaviyo se encargará de la resolución del perfil y de actualizarlo internamente. 
    3. Una forma de evitar este problema es utilizar una única tabla de importación para todos tus perfiles. 
Prevención del Bucle Circular de Importación-Exportación 

Prevención del Bucle Circular de Importación-Exportación 

  1. DEBERÍAS gestionar cuidadosamente los escenarios en los que se utilicen las funciones de importación y exportación para evitar bucles circulares de importación-exportación. Asegúrate de que tu proceso de exportación no retroalimenta datos a una tabla anterior a tu tabla de importación, ya que Klaviyo no detecta actualmente este escenario.
    1. Klaviyo aún no dispone de lógica para detectar este escenario.
    2. Esto sería algo así
      1. En cada ciclo de sincronización de exportación, Klaviyo exportará todo tu perfil
      2. Luego añades todos los perfiles exportados a tu tabla de importación mediante una serie de transformaciones.
      3. En cada ciclo de sincronización de importación, Klaviyo leerá todos los perfiles de tu tabla de importación, que finalmente se reexportarán
    3. Escenarios en los que probablemente sea seguro 
      1. si sólo utilizas la tabla de exportación para restringir las filas añadidas a tu tabla de importación
      2. Si compruebas que la tabla de exportación no añade filas a tu tabla de importación.
    4. ¿Cuáles son las consecuencias de un bucle circular de importación-exportación?
      1. Esto supondrá costes de computación innecesarios tanto para ti como para Klaviyo.

 

¿Te ha resultado útil este artículo?
Utiliza este formulario solo para enviar comentarios sobre el artículo. Más información sobre cómo contactar con el servicio de asistencia.

Descubre más sobre Klaviyo

Klaviyo Community
Conecta con compañeros, socios y expertos de Klaviyo para encontrar ideas, compartir información y resolver todas tus dudas.
Formación en tiempo real
Únete a una sesión en tiempo real con expertos de Klaviyo para conocer las prácticas recomendadas, cómo configurar funciones clave y mucho más.
Asistencia

Accede al servicio de asistencia a través de tu cuenta.

Asistencia por correo electrónico (prueba gratuita y cuentas de pago) Disponible 24/7

Asistencia por chat/virtual
La disponibilidad varía según la ubicación y el tipo de plan