Migración de la tabla de exportación de perfiles de Snowflake a una tabla híbrida
Qué aprenderás
Descubre cómo convertir la tabla KLAVIYO_PROFILE en la que el exportador del almacén de datos de Klaviyo escribe 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 diseñado para lecturas y escrituras puntuales de baja latencia basadas en índices, por lo que la conversión reduce el tiempo y el coste de esas operaciones MERGE (esto se aplica independientemente de cómo leas la tabla después, por lo que merece la pena hacerlo incluso si solo ejecutas análisis y agregaciones analíticas de gran tamaño más adelante). Si también usas KLAVIYO_PROFILE para ofrecer búsquedas de perfiles individuales a una aplicación, una API o una IU, una tabla híbrida también devuelve esas búsquedas más rápido.
Advanced KDP 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.
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 mediante 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 forma 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 La sincronización del 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 puede conceder privilegios (SECURITYADMIN).
- Una cuenta que admite 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 de SnowGov de EE. UU. ni en cuentas de prueba. Los clientes de Virtual Private Snowflake deben ponerse en contacto con Snowflake Support.
- Espacio disponible bajo la cuota de almacenamiento híbrido de 2 TB de Snowflake por base de datos.
Realiza las cuatro comprobaciones siguientes antes de cambiar nada.
1. Confirma que la cuenta admite tablas híbridas
Sustituye 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 ahí en cualquier lugar donde este artículo se refiera a KLAVIYO_PROFILE.
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 cualquiera de las dos afirmaciones falla, las tablas híbridas no están habilitadas para tu cuenta o región y debes detenerte aquí.
2. Ajusta el tamaño de la tabla de perfiles
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 los mismos datos suelen ocupar más espacio que en una tabla estándar columnar. Trata la cifra SIZE_GB como un mínimo, no como una estimación, y deja margen por debajo de la cuota de 2 TB por base de datos.
3. Buscar ID duplicados o nulos
El script de configuración de Klaviyo ya declara una clave principal (ID) en la tabla estándar, pero Snowflake no aplica claves principales 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.
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 del paso 2 fallará.
4. Comprueba las dependencias posteriores
Las tablas híbridas no admiten claves de clustering, uso compartido de datos, tablas dinámicas, Fail-safe, vistas materializadas, Query Acceleration Service, replicación, Search Optimization Service, Snowpipe, Snowpipe Streaming, streams ni UNDROP. Time Travel es compatible con limitaciones.
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 posterior depende de una función no compatible, vuelve a crearlo antes de migrar.
Paso 1: 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ódico y selecciona Pausar.
Espera a que cualquier sincronización en curso muestre el estado Completada o En pausa antes de continuar. Migrar mientras una sincronización está escribiendo en la tabla puede hacer que se pierdan filas.
Paso 2: crear la tabla híbrida y cargarla
CREATE HYBRID TABLE ... AS SELECT requiere que declares explícitamente el esquema completo de las columnas; no se puede inferir a partir de SELECT. Usa los mismos nombres de columna y tipos de datos que la tabla existente para que la sincronización de Klaviyo siga escribiendo en ella sin cambios.
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 configurado un almacén de datos en ejecución o CREATE HYBRID TABLE devuelve un error.
- PROPERTIES sigue siendo una columna OBJECT. Las columnas semiestructuradas se admiten en tablas híbridas siempre que no estén indexadas.
- Las CTA en una tabla híbrida vacía usan la ruta optimizada de carga masiva de Snowflake. En el perfil de consultas de Snowsight, el número de filas insertadas aparece como número de filas cargadas en masa cuando se utiliza la ruta rápida.
- Si la sentencia falla en una restricción, un ID duplicado o nulo se coló en la comprobación anterior. Corrígelo en la tabla estándar y vuelve a ejecutar.
Cargar una tabla muy grande en lotes
Si un único CTAS es demasiado grande para ejecutarlo cómodamente, crea la tabla híbrida vacía y cárgala por intervalos de fechas. INSERT INTO ... SELECT también utiliza la ruta optimizada de carga masiva.
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 solapen ni dejen huecos.
Paso 3: añadir índices secundarios
La clave principal en ID se indexa automáticamente. Añade índices secundarios solo para las columnas en las que realmente filtras, ya que cada índice consume almacenamiento y añade coste a cada escritura. Si buscas perfiles por EMAIL o EXTERNAL_ID, indexa esas columnas; si también filtras u ordenas por la actualidad (por ejemplo, al recuperar perfiles actualizados desde un momento determinado), indexa UPDATED también.
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 añadas 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 la sincronización fallara.
- No puedes indexar PROPIEDADES. Las columnas semiestructuradas (variante, OBJECT, ARRAY) no se pueden indexar.
- UPDATED y CREATED son TIMESTAMP_NTZ, que se admite para índices secundarios. TIMESTAMP_TZ no lo está.
- Los índices no se pueden modificar ni se les pueden añadir columnas después de crearlos. Elimina el índice y vuelve a crearlo para cambiarlo.
- Si una carga devuelve "The value is too long for index", reduce el número de columnas indexadas o el ancho de las columnas indexadas.
Para ver los índices en la tabla:
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.
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 es híbrida y, después, haz una comprobación puntual de una lectura de puntos con respecto a la misma consulta en la tabla estándar:
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 para ponerla en su lugar
Cambia el nombre de la tabla estándar para apartarla en lugar de eliminarla, de modo que tengas una ruta de reversión.
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 tabla, no al nombre de la tabla. Tras el cambio de nombre, el rol de servicio de Klaviyo no tiene privilegios en la nueva 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 tu script de configuración de Snowflake.
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 Klaviyo Data Platform > Data management > Syncing, haz clic en tu destino de Snowflake, abre la pestaña Periodic y selecciona Reanudar.
Las sincronizaciones periódicas se ejecutan cada hora. Cuando termine el siguiente ciclo, confirma que el estado sea Completado y comprueba que los datos se están registrando:
SELECT
COUNT(*) AS ROW_COUNT,
MAX(UPDATED) AS LAST_UPDATED
FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE; Si la sincronización genera errores, 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 La sincronización del almacén de datos en Klaviyo.
Revertir
Si la sincronización falla con la tabla híbrida y necesitas revertirla, pausa la sincronización y vuelve a cambiar las tablas.
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 próxima sincronización periódica de Klaviyo rellena cualquier elemento creado o actualizado mientras se cambiaba la tabla.
Después de migrar
Cuando tengas confianza en la nueva tabla, elimina la copia de seguridad para que deje de acumular costes de almacenamiento.
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 de Entender la sincronización con el almacén de datos en Klaviyo después de migrar. Ese script usa CREATE OR REPLACE TABLE, lo que sustituiría tu 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 tablas híbridas por base de datos de Snowflake. Si la superas, se bloquean las escrituras en todas las tablas híbridas de esa base de datos hasta que vuelvas a situar el uso 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 del 80 % de lectura / 20 % de escritura.
- Sin sistema de seguridad, Time Travel limitado: UNDROP no es compatible con las tablas híbridas. Mantén tu propio proceso de copia de seguridad si lo necesitas.
- Sin caché de resultados: las consultas en tablas híbridas no utilizan la caché de resultados de consultas persistidas de Snowflake.
- Coste: el almacenamiento y las solicitudes de tablas híbridas se miden por separado del almacenamiento y la computación de tablas estándar. Revisa la documentación de costes de Snowflake antes de migrar una tabla grande.
Recursos adicionales
- La sincronización del almacén de datos en Klaviyo
- Conectar Klaviyo y Snowflake
- Snowflake: Tablas híbridas
- Snowflake: Crear tablas híbridas
- Snowflake: limitaciones y funciones no admitidas para tablas híbridas
- Snowflake: Evaluar el coste de las tablas híbridas
- Snowflake: Convertir tablas estándar de Snowflake en tablas híbridas