Objetivos del artículo

Aprende a convertir la tabla KLAVIYO_PROFILE a la que escribe la exportación del almacén de datos de Klaviyo en Snowflake, de una tabla estándar a una tabla híbrida de Snowflake, con los comandos exactos que debes ejecutar en cada paso.

La sincronización de exportación de Klaviyo escribe en KLAVIYO_PROFILE con un MERGE (upsert) en cada ejecución periódica. Las tablas híbridas son un tipo de tabla de Snowflake creado para lecturas y escrituras puntuales basadas en índices y de baja latencia, por lo que la conversión reduce el tiempo y el costo de esas operaciones MERGE; esto se mantiene independientemente de cómo leas la tabla después, así que vale la pena hacerlo incluso si solo ejecutas análisis y agregaciones de gran escala más adelante. Si también usas KLAVIYO_PROFILE para servir búsquedas individuales de perfiles a una aplicación, una interfaz de programación de aplicaciones (API) o una IU, una tabla híbrida también devuelve esas búsquedas más rápido.

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 la funcionalidad asociada. Visita nuestra guía de facturación para saber cómo contratar este plan.

Las tablas híbridas son una función de Snowflake, no de Klaviyo. La sincronización de exportación de Klaviyo escribe en KLAVIYO_PROFILE con SQL estándar y no requiere un tipo de tabla específico, pero las tablas híbridas no forman parte del script de configuración de Snowflake documentado de Klaviyo. Ejecuta esta migración primero en una base de datos que no sea de producción y ten en cuenta que Snowflake mide el almacenamiento y las solicitudes de las tablas híbridas de manera diferente a las tablas estándar.

Antes de empezar

Necesitarás todo lo siguiente:

  • Un destino de Snowflake que ya está configurado y sincronizando. Consulta Comprende la sincronización con el almacén de datos en Klaviyo.
  • Un rol con CREATE TABLE en el esquema que contiene KLAVIYO_PROFILE (SYSADMIN en el script de configuración de Klaviyo) y un rol que pueda conceder privilegios (SECURITYADMIN).
  • Una cuenta que admita tablas híbridas. Las tablas híbridas suelen estar disponibles de forma general solo en regiones comerciales de AWS y Microsoft Azure. No están disponibles en Google Cloud, en regiones SnowGov de EE. UU. ni en cuentas de prueba. Los clientes de Virtual Private Snowflake deben ponerse en contacto con Snowflake Support.
  • Margen disponible bajo la cuota de almacenamiento híbrido de 2 TB de Snowflake por base de datos.

Completa las cuatro comprobaciones a continuación antes de cambiar nada.

1. Confirma que la cuenta sea compatible con tablas híbridas

Reemplaza KLAVIYO_DATABASE y KLAVIYO_DATA_TRANSFER_WAREHOUSE por los nombres que configuraste en el script de configuración de Snowflake. El script crea la tabla de perfiles a partir de una variable $profile_table, así que sustituye el valor que asignaste allí en cualquier lugar donde este artículo se refiera a KLAVIYO_PROFILE.

text
USE ROLE SYSADMIN;
USE WAREHOUSE KLAVIYO_DATA_TRANSFER_WAREHOUSE;
USE DATABASE KLAVIYO_DATABASE;
USE SCHEMA PUBLIC;

CREATE OR REPLACE HYBRID TABLE HYBRID_SMOKE_TEST (ID VARCHAR(32) PRIMARY KEY);
DROP TABLE HYBRID_SMOKE_TEST;

Si alguna de las dos afirmaciones falla, las tablas híbridas no están habilitadas para tu cuenta o región, y debes detenerte aquí.

2. Define el tamaño de la tabla de perfiles

text
SELECT
    ROW_COUNT,
    BYTES / POWER(1024, 3) AS SIZE_GB
FROM KLAVIYO_DATABASE.INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'PUBLIC'
  AND TABLE_NAME = 'KLAVIYO_PROFILE';

Las tablas híbridas usan almacenamiento principal basado en filas, por lo que, por lo general, los mismos datos ocupan más espacio que en una tabla estándar columnar. Considera la cifra SIZE_GB como un mínimo, no como una estimación, y deja espacio dentro de la cuota de 2 TB por base de datos.

3. Comprueba si hay ID duplicados o nulos

El script de configuración de Klaviyo ya declara la clave primaria (ID) en la tabla estándar, pero Snowflake no aplica claves primarias en tablas estándar. Las tablas híbridas sí las aplican, por lo que los ID duplicados o nulos que antes se toleraban ahora bloquearán la carga. Ambas consultas deben devolver 0.

text
SELECT COUNT(*) AS DUPLICATE_IDS
FROM (
    SELECT ID
    FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE
    GROUP BY ID
    HAVING COUNT(*) > 1
);

SELECT COUNT(*) AS NULL_IDS
FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE
WHERE ID IS NULL;

Si cualquiera de los dos devuelve un valor distinto de cero, resuelve el problema de calidad de datos en la tabla estándar antes de continuar. De lo contrario, la carga en el paso 2 fallará.

4. Verifica las dependencias posteriores

Las tablas híbridas no admiten claves de agrupamiento, uso compartido de datos, tablas dinámicas, Fail-safe, vistas materializadas, Query Acceleration Service, replicación, Search Optimization Service, Snowpipe, Snowpipe Streaming, flujos o UNDROP. Time Travel se admite con limitaciones.

text
SELECT
    REFERENCING_DATABASE,
    REFERENCING_SCHEMA,
    REFERENCING_OBJECT_NAME,
    REFERENCING_OBJECT_DOMAIN
FROM SNOWFLAKE.ACCOUNT_USAGE.OBJECT_DEPENDENCIES
WHERE REFERENCED_OBJECT_NAME = 'KLAVIYO_PROFILE';

Si algo de lo que está más abajo depende de una función no compatible, vuelve a crearlo antes de migrar.

Paso 1: Pon en pausa la sincronización de exportación

En Klaviyo, ve a Advanced Klaviyo Data Platform > Gestión de datos > Sincronización, haz clic en tu destino de Snowflake, abre la pestaña Periódica y selecciona Pausar.

Espera hasta que cualquier sincronización en curso muestre el estado Completed o Paused antes de continuar. Migrar mientras una sincronización está escribiendo en la tabla puede eliminar filas.

Paso 2: Crear la tabla híbrida y cargarla

CREATE HYBRID TABLE ... AS SELECT requiere que declares explícitamente el esquema completo de columnas; no se puede inferir a partir del SELECT. Usa los mismos nombres de columnas y tipos de datos que la tabla existente para que la sincronización de Klaviyo siga escribiendo en ella sin cambios.

text
USE ROLE SYSADMIN;
USE WAREHOUSE KLAVIYO_DATA_TRANSFER_WAREHOUSE;
USE DATABASE KLAVIYO_DATABASE;
USE SCHEMA PUBLIC;

CREATE OR REPLACE HYBRID TABLE KLAVIYO_PROFILE_HYBRID (
    ID VARCHAR(32) NOT NULL,
    EXTERNAL_ID VARCHAR(255),
    EMAIL VARCHAR(255),
    PHONE_NUMBER VARCHAR(255),
    FIRST_NAME VARCHAR(255),
    LAST_NAME VARCHAR(255),
    TITLE VARCHAR(255),
    ORGANIZATION VARCHAR(255),
    PROPERTIES OBJECT,
    IMAGE VARCHAR(255),
    CREATED TIMESTAMP_NTZ(9),
    UPDATED TIMESTAMP_NTZ(9),
    LOCATION_ADDRESS1 VARCHAR(255),
    LOCATION_ADDRESS2 VARCHAR(255),
    LOCATION_CITY VARCHAR(255),
    LOCATION_COUNTRY VARCHAR(255),
    LOCATION_LATITUDE VARCHAR(255),
    LOCATION_LONGITUDE VARCHAR(255),
    LOCATION_REGION VARCHAR(255),
    LOCATION_ZIP VARCHAR(255),
    PRIMARY KEY (ID)
)
AS
SELECT
    ID,
    EXTERNAL_ID,
    EMAIL,
    PHONE_NUMBER,
    FIRST_NAME,
    LAST_NAME,
    TITLE,
    ORGANIZATION,
    PROPERTIES,
    IMAGE,
    CREATED,
    UPDATED,
    LOCATION_ADDRESS1,
    LOCATION_ADDRESS2,
    LOCATION_CITY,
    LOCATION_COUNTRY,
    LOCATION_LATITUDE,
    LOCATION_LONGITUDE,
    LOCATION_REGION,
    LOCATION_ZIP
FROM KLAVIYO_PROFILE;
  • La sesión debe tener un almacén en ejecución configurado, o CREATE HYBRID TABLE devuelve un error.
  • PROPERTIES se mantiene como una columna de tipo OBJECT. Las columnas semiestructuradas se admiten en tablas híbridas siempre que no estén indexadas.
  • CTAS en una tabla híbrida vacía usa la ruta optimizada de carga masiva de Snowflake. En el perfil de consulta de Snowsight, Number of rows inserted aparece como Number of rows bulk loaded cuando se usa la ruta rápida.
  • Si la sentencia falla por una restricción, se coló un ID duplicado o nulo durante la verificación anterior. Arréglalo en la tabla estándar y vuelve a ejecutar.

Cargar una tabla muy grande por lotes

Si una sola CTAS es demasiado grande para ejecutarse cómodamente, crea la tabla híbrida vacía y cárgala en rangos de fechas. INSERT INTO ... SELECT también usa la ruta optimizada de carga masiva.

text
CREATE OR REPLACE HYBRID TABLE KLAVIYO_PROFILE_HYBRID (
    ID VARCHAR(32) NOT NULL,
    EXTERNAL_ID VARCHAR(255),
    EMAIL VARCHAR(255),
    PHONE_NUMBER VARCHAR(255),
    FIRST_NAME VARCHAR(255),
    LAST_NAME VARCHAR(255),
    TITLE VARCHAR(255),
    ORGANIZATION VARCHAR(255),
    PROPERTIES OBJECT,
    IMAGE VARCHAR(255),
    CREATED TIMESTAMP_NTZ(9),
    UPDATED TIMESTAMP_NTZ(9),
    LOCATION_ADDRESS1 VARCHAR(255),
    LOCATION_ADDRESS2 VARCHAR(255),
    LOCATION_CITY VARCHAR(255),
    LOCATION_COUNTRY VARCHAR(255),
    LOCATION_LATITUDE VARCHAR(255),
    LOCATION_LONGITUDE VARCHAR(255),
    LOCATION_REGION VARCHAR(255),
    LOCATION_ZIP VARCHAR(255),
    PRIMARY KEY (ID)
);

INSERT INTO KLAVIYO_PROFILE_HYBRID
SELECT * FROM KLAVIYO_PROFILE
WHERE UPDATED < '2024-01-01';

INSERT INTO KLAVIYO_PROFILE_HYBRID
SELECT * FROM KLAVIYO_PROFILE
WHERE UPDATED >= '2024-01-01' AND UPDATED < '2025-01-01';

INSERT INTO KLAVIYO_PROFILE_HYBRID
SELECT * FROM KLAVIYO_PROFILE
WHERE UPDATED >= '2025-01-01' OR UPDATED IS NULL;

Ajusta los límites para que se adapten a los datos y asegúrate de que los rangos no se superpongan ni dejen espacios.

Paso 3: Agrega índices secundarios

La clave principal en ID se indexa automáticamente. Agrega índices secundarios solo para las columnas en las que realmente filtras, porque cada índice consume almacenamiento y agrega costos a cada escritura. Si buscas perfiles por EMAIL o EXTERNAL_ID, indexa esas columnas; si también filtras u ordenas por recencia (por ejemplo, al obtener perfiles actualizados desde un momento determinado), indexa UPDATED también.

text
CREATE INDEX IDX_KLAVIYO_PROFILE_EMAIL
    ON KLAVIYO_PROFILE_HYBRID (EMAIL);

CREATE INDEX IDX_KLAVIYO_PROFILE_EXTERNAL_ID
    ON KLAVIYO_PROFILE_HYBRID (EXTERNAL_ID);

CREATE INDEX IDX_KLAVIYO_PROFILE_UPDATED
    ON KLAVIYO_PROFILE_HYBRID (UPDATED);

No agregues restricciones UNIQUE a EMAIL, PHONE_NUMBER o EXTERNAL_ID. Los perfiles de Klaviyo pueden tener un valor nulo o repetido en cualquiera de estas columnas, y las tablas híbridas aplican restricciones UNIQUE, lo que haría que tu sincronización fallara.

  • No puedes indexar PROPERTIES. No se pueden indexar las columnas semiestructuradas (variante, OBJECT, ARRAY).
  • UPDATED y CREATED son TIMESTAMP_NTZ, lo cual es compatible con índices secundarios. TIMESTAMP_TZ no lo es.
  • Los índices no se pueden modificar ni se les pueden agregar columnas después de la creación. Elimina y vuelve a crear el índice para cambiarlo.
  • Si una carga devuelve "El valor es demasiado largo para el índice", reduce el número de columnas indexadas o el ancho de las columnas indexadas.

Para ver los índices en la tabla:

text
SHOW INDEXES IN TABLE KLAVIYO_PROFILE_HYBRID;

Paso 4: Validar el texto

Los recuentos de filas deben coincidir y la consulta de diferencias debe devolver 0.

text
SELECT
    (SELECT COUNT(*) FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE) AS STANDARD_ROWS,
    (SELECT COUNT(*) FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE_HYBRID) AS HYBRID_ROWS;

SELECT COUNT(*) AS MISSING_IDS
FROM (
    SELECT ID FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE
    MINUS
    SELECT ID FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE_HYBRID
);

Confirma que la nueva tabla realmente sea híbrida y, luego, valida de forma puntual una lectura puntual comparándola con la misma consulta en la tabla estándar:

text
SHOW HYBRID TABLES LIKE 'KLAVIYO_PROFILE_HYBRID';

SELECT * FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE_HYBRID
WHERE EMAIL = 'someone@example.com';

Paso 5: Intercambia la tabla híbrida a su lugar

Cambia el nombre de la tabla estándar para apartarla, en lugar de eliminarla, para que tengas una ruta de reversión.

text
USE ROLE SYSADMIN;
USE DATABASE KLAVIYO_DATABASE;
USE SCHEMA PUBLIC;

ALTER TABLE KLAVIYO_PROFILE RENAME TO KLAVIYO_PROFILE_STANDARD_BACKUP;
ALTER TABLE KLAVIYO_PROFILE_HYBRID RENAME TO KLAVIYO_PROFILE;

Los privilegios siguen al objeto de la tabla, no al nombre de la tabla. Después de cambiar el nombre, el rol de servicio de Klaviyo no tiene privilegios en el nuevo KLAVIYO_PROFILE y la sincronización fallará hasta que completes el paso 6.

Paso 6: vuelve a conceder privilegios al rol de Klaviyo

Sustituye el nombre del rol que configuraste como role_name en el script de configuración de Snowflake.

text
USE ROLE SECURITYADMIN;

GRANT SELECT, INSERT, UPDATE, DELETE
    ON TABLE KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE
    TO ROLE KLAVIYO_DATA_TRANSFER_ROLE;

SHOW GRANTS ON TABLE KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE;

Paso 7: Reanuda la sincronización y confirma

En Klaviyo, vuelve a Advanced KDP > Data management > Syncing, haz clic en el destino de Snowflake, abre la pestaña Periodic y selecciona Reanudar.

Las sincronizaciones periódicas se ejecutan cada hora. Después de que se complete el siguiente ciclo, confirma que el estado sea Completado y verifica que los datos se estén registrando:

text
SELECT
    COUNT(*) AS ROW_COUNT,
    MAX(UPDATED) AS LAST_UPDATED
FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE;

Si la sincronización genera un error, abre la exportación fallida en la pestaña Periodic para leer el resumen del error, el código y el mensaje devuelto por Snowflake. Consulta la sección Ver registros de errores de Comprender la sincronización con el almacén de datos en Klaviyo.

Revertir

Si la sincronización falla con la tabla híbrida y necesitas revertir, pausa la sincronización y vuelve a intercambiar las tablas.

text
USE ROLE SYSADMIN;
USE DATABASE KLAVIYO_DATABASE;
USE SCHEMA PUBLIC;

ALTER TABLE KLAVIYO_PROFILE RENAME TO KLAVIYO_PROFILE_HYBRID;
ALTER TABLE KLAVIYO_PROFILE_STANDARD_BACKUP RENAME TO KLAVIYO_PROFILE;

USE ROLE SECURITYADMIN;
GRANT SELECT, INSERT, UPDATE, DELETE
    ON TABLE KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE
    TO ROLE KLAVIYO_DATA_TRANSFER_ROLE;

Luego, reanuda la sincronización. La siguiente sincronización periódica de Klaviyo completa cualquier dato creado o actualizado mientras se reemplazaba la tabla.

Después de migrar

Cuando tengas confianza en la nueva tabla, elimina la copia de seguridad para que deje de generar costos de almacenamiento.

text
USE ROLE SYSADMIN;
DROP TABLE KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE_STANDARD_BACKUP;

No vuelvas a ejecutar el script de configuración de destino de Snowflake desde Entiende la sincronización del almacén de datos en Klaviyo después de migrar. Ese script usa CREATE OR REPLACE TABLE, lo que reemplazaría la tabla híbrida por una tabla estándar vacía.

Ten en cuenta lo siguiente de forma continua:

  • Cuota de almacenamiento: Estás limitado a 2 TB de datos de tabla híbrida por base de datos de Snowflake. Si la excedes, las escrituras en todas las tablas híbridas de esa base de datos se bloquean hasta que vuelvas a estar por debajo de la cuota, lo que hará que falle la sincronización de Klaviyo.
  • Cuota de solicitudes: Aproximadamente 16 000 operaciones por segundo por base de datos para una carga de trabajo equilibrada de 80 % de lectura/20 % de escritura.
  • Sin modo a prueba de fallos, viaje en el tiempo limitado: UNDROP no es compatible con tablas híbridas. Mantén tu propio proceso de respaldos si necesitas uno.
  • Sin caché de resultados: Las consultas a tablas híbridas no usan la caché de resultados de consultas persistentes de Snowflake.
  • Costo: El almacenamiento y las solicitudes de tablas híbridas se miden por separado del almacenamiento y el procesamiento de tablas estándar. Revisa la documentación de costos de Snowflake antes de migrar una tabla grande.

Recursos adicionales

¿Te resultó útil este artículo?
Usa este formulario solo para enviar comentarios sobre el artículo. Más información sobre cómo contactar al equipo de asistencia.

Descubre más sobre Klaviyo

Comunidad
Conecta con colegas, socios y expertos de Klaviyo para inspirarte, compartir ideas y resolver todas tus dudas.
Socios
Contrata a un experto certificado por Klaviyo para ayudarte con una tarea específica o para la gestión continua de marketing.
Asistencia

Accede a la asistencia a través de tu cuenta.

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

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