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.

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 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

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 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.

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 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.

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 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.

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 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.

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 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.

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 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:

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 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:

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 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.

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 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.

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 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:

text
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.

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 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.

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 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

¿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.
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 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