Migrazione della tabella di esportazione dei profili Snowflake in una tabella ibrida
Cosa imparerai
Scopri come convertire la tabella KLAVIYO_PROFILE in cui l’esportazione del magazzino dati di Klaviyo scrive in Snowflake da una tabella standard a una tabella ibrida Snowflake, con i comandi esatti da eseguire in ogni passaggio.
La sincronizzazione di esportazione di Klaviyo scrive su KLAVIYO_PROFILE con un MERGE (upsert) a ogni esecuzione periodica. Le tabelle ibride sono un tipo di tabella Snowflake creato per letture e scritture puntuali a bassa latenza basate su indici, quindi la conversione riduce tempo e costo di queste operazioni di MERGE: vale indipendentemente da come leggi la tabella in seguito, quindi conviene farlo anche se a valle esegui solo grandi scansioni e aggregazioni analitiche. Se usi anche KLAVIYO_PROFILE per servire ricerche di singoli profili a un’applicazione, un’API o un’interfaccia utente, una tabella ibrida restituisce queste ricerche più velocemente.
Advanced Klaviyo Data Platform non è incluso nell'applicazione di marketing standard di Klaviyo e per accedere alle funzionalità associate è necessario un abbonamento. Visita la nostra guida alla fatturazione per scoprire come acquistare questo piano.
Le tabelle ibride sono una funzionalità di Snowflake, non di Klaviyo. La sincronizzazione dell’esportazione di Klaviyo scrive su KLAVIYO_PROFILE usando SQL standard e non richiede un tipo di tabella specifico, ma le tabelle ibride non fanno parte dello script di configurazione di Snowflake documentato da Klaviyo. Esegui prima questa migrazione su un database non di produzione e tieni presente che Snowflake misura lo storage e le richieste delle tabelle ibride in modo diverso rispetto alle tabelle standard.
Prima di iniziare
Ti serviranno tutti i seguenti:
- Una destinazione Snowflake già configurata e in sincronizzazione. Consulta Come funziona la sincronizzazione del magazzino dati in Klaviyo.
- Un ruolo con CREATE TABLE sullo schema che contiene KLAVIYO_PROFILE (SYSADMIN nello script di configurazione di Klaviyo) e un ruolo che può concedere privilegi (SECURITYADMIN).
- Un account che supporta tabelle ibride. Le tabelle ibride sono generalmente disponibili solo nelle regioni AWS e Microsoft Azure commerciali. Non sono disponibili su Google Cloud, nelle regioni SnowGov degli Stati Uniti o negli account di prova. I clienti Snowflake Virtual Private devono contattare l’assistenza Snowflake.
- Spazio disponibile sotto la quota di archiviazione ibrida di 2 TB di Snowflake per database.
Esamina tutti e quattro i controlli di seguito prima di modificare qualsiasi cosa.
1. Conferma che il tuo account supporti le tabelle ibride
Sostituisci KLAVIYO_DATABASE e KLAVIYO_DATA_TRANSFER_WAREHOUSE con i nomi che hai impostato nello script di configurazione di Snowflake. Lo script crea la tabella dei profili dalla variabile $profile_table, quindi sostituisci il valore che hai assegnato lì ovunque questo articolo faccia riferimento 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; Se una delle due istruzioni non viene eseguita correttamente, le tabelle ibride non sono abilitate per il tuo account o per la tua regione e dovresti fermarti qui.
2. Dimensiona la tabella dei profili
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'; Le tabelle ibride usano l’archiviazione primaria basata su righe, quindi in genere gli stessi dati occupano più spazio rispetto a una tabella standard a colonne. Considera il valore SIZE_GB come un minimo, non come una stima, e lascia margine al di sotto della quota di 2 TB per database.
3. Controlla se sono presenti ID duplicati o nulli
Lo script di configurazione di Klaviyo dichiara già la chiave primaria (ID) nella tabella standard, ma Snowflake non applica le chiavi primarie nelle tabelle standard. Le tabelle ibride invece le applicano, quindi gli ID duplicati o null che prima venivano tollerati ora bloccheranno il caricamento. Entrambe le query devono restituire 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; Se uno dei due restituisce un valore diverso da zero, risolvi il problema di qualità dei dati nella tabella standard prima di continuare. Altrimenti, il caricamento nel passaggio 2 non andrà a buon fine.
4. Controlla le dipendenze downstream
Le tabelle ibride non supportano chiavi di clustering, condivisione dei dati, tabelle dinamiche, Fail-safe, viste materializzate, Query Acceleration Service, replica, Search Optimization Service, Snowpipe, Snowpipe Streaming, stream o UNDROP. Time Travel è supportato con limitazioni.
SELECT
REFERENCING_DATABASE,
REFERENCING_SCHEMA,
REFERENCING_OBJECT_NAME,
REFERENCING_OBJECT_DOMAIN
FROM SNOWFLAKE.ACCOUNT_USAGE.OBJECT_DEPENDENCIES
WHERE REFERENCED_OBJECT_NAME = 'KLAVIYO_PROFILE'; Se qualcosa a valle si basa su una funzionalità non supportata, ricostruiscila prima di eseguire la migrazione.
Passaggio 1: metti in pausa la sincronizzazione dell'esportazione
In Klaviyo, vai a Advanced KDP > Gestione dati > Sincronizzazione, fai clic sulla destinazione Snowflake, apri la scheda Periodico e seleziona Sospendi.
Attendi che eventuali sincronizzazioni in corso mostrino lo stato Completed o Paused prima di continuare. Eseguire la migrazione mentre una sincronizzazione sta scrivendo nella tabella può causare la perdita di righe.
Passaggio 2: crea la tabella ibrida e caricala
CREATE HYBRID TABLE ... AS SELECT richiede di dichiarare esplicitamente lo schema completo delle colonne; non può essere dedotto dalla SELECT. Usa gli stessi nomi di colonna e tipi di dati della tabella esistente, in modo che la sincronizzazione di Klaviyo continui a scrivere al suo interno senza modifiche.
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 sessione deve avere un warehouse in esecuzione impostato, altrimenti CREATE HYBRID TABLE restituisce un errore.
- PROPERTIES rimane una colonna OBJECT. Le colonne semistrutturate sono supportate nelle tabelle ibride purché non siano indicizzate.
- CTAS in una tabella ibrida vuota utilizza il percorso di caricamento in blocco ottimizzato di Snowflake. Nel profilo della query di Snowsight, Numero di righe inserite viene visualizzato come Numero di righe caricate in blocco quando viene utilizzato il percorso rapido.
- Se l'istruzione non va a buon fine su un vincolo, significa che un ID duplicato o nullo è sfuggito al controllo precedente. Correggilo nella tabella standard ed esegui di nuovo.
Caricamento di una tabella molto grande in batch
Se una singola CTAS è troppo grande per essere eseguita comodamente, crea la tabella ibrida vuota e caricala invece per intervalli di date. INSERT INTO ... SELECT usa anche il percorso ottimizzato di caricamento in blocco.
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; Regola i confini in base ai tuoi dati e assicurati che gli intervalli non si sovrappongano né lascino spazi vuoti.
Passaggio 3: aggiungi indici secondari
La chiave primaria su ID viene indicizzata automaticamente. Aggiungi indici secondari solo per le colonne su cui applichi effettivamente filtri, perché ogni indice consuma spazio di archiviazione e aggiunge costi a ogni operazione di scrittura. Se cerchi i profili tramite E-MAIL o EXTERNAL_ID, indicizza queste colonne; se applichi anche filtri o ordinamenti in base alla recentità (ad esempio, recuperando i profili aggiornati da un certo momento in poi), indicizza anche UPDATED.
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); Non aggiungere vincoli UNIQUE a E-MAIL, PHONE_NUMBER o EXTERNAL_ID. I profili Klaviyo possono avere un valore null o ripetuto in una qualsiasi di queste colonne e le tabelle ibride applicano vincoli UNIQUE, il che causerebbe l’errore della sincronizzazione.
- Non puoi indicizzare PROPERTIES. Le colonne semistrutturate (variante, OBJECT, ARRAY) non possono essere indicizzate.
- UPDATED e CREATED sono TIMESTAMP_NTZ, che è supportato per gli indici secondari. TIMESTAMP_TZ non lo è.
- Gli indici non possono essere modificati o avere colonne aggiunte dopo la creazione. Elimina e ricrea l'indice per modificarlo.
- Se un caricamento restituisce "Il valore è troppo lungo per l'indice", riduci il numero di colonne indicizzate o la larghezza delle colonne indicizzate.
Per visualizzare gli indici nella tabella:
SHOW INDEXES IN TABLE KLAVIYO_PROFILE_HYBRID; Passaggio 4: valida la copia
Il numero di righe deve corrispondere e la query di differenza deve restituire 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
); Conferma che la nuova tabella sia davvero ibrida, quindi verifica a campione una lettura puntuale rispetto alla stessa query sulla tabella standard:
SHOW HYBRID TABLES LIKE 'KLAVIYO_PROFILE_HYBRID';
SELECT * FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE_HYBRID
WHERE EMAIL = 'someone@example.com'; Passaggio 5: sostituisci la tabella ibrida
Rinomina la tabella standard per spostarla fuori percorso invece di eliminarla, così hai una procedura di rollback.
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; I privilegi seguono l'oggetto tabella, non il nome della tabella. Dopo la ridenominazione, il ruolo del servizio Klaviyo non ha privilegi sul nuovo KLAVIYO_PROFILE e la sincronizzazione non andrà a buon fine finché non completi il passaggio 6.
Passaggio 6: concedi di nuovo i privilegi al ruolo Klaviyo
Sostituisci il nome del ruolo che hai impostato come role_name nello script di configurazione di 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; Passaggio 7: riprendi la sincronizzazione e conferma
In Klaviyo, torna a Advanced Klaviyo Data Platform > Data management > Syncing, fai clic sulla destinazione Snowflake, apri la scheda Periodic e seleziona Riprendi.
Le sincronizzazioni periodiche vengono eseguite ogni ora. Dopo il completamento del prossimo ciclo, conferma che lo stato sia Completato e verifica che i dati vengano acquisiti:
SELECT
COUNT(*) AS ROW_COUNT,
MAX(UPDATED) AS LAST_UPDATED
FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE; Se la sincronizzazione genera errori, apri l’esportazione non riuscita nella scheda Periodic per leggere il riepilogo dell’errore, il codice e il messaggio restituito da Snowflake. Consulta la sezione Visualizza registri errori di Come funziona la sincronizzazione del magazzino dati in Klaviyo.
Ripristino
Se la sincronizzazione non va a buon fine sulla tabella ibrida e devi ripristinare, metti in pausa la sincronizzazione e ripristina le tabelle precedenti.
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; Poi riprendi la sincronizzazione. La prossima sincronizzazione periodica di Klaviyo compila retroattivamente tutto ciò che è stato creato o aggiornato mentre la tabella è stata sostituita.
Dopo la migrazione
Quando hai la certezza che la nuova tabella funzioni, elimina la copia di backup per interrompere l’accumulo dei costi di archiviazione.
USE ROLE SYSADMIN;
DROP TABLE KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE_STANDARD_BACKUP; Non eseguire di nuovo lo script di configurazione della destinazione Snowflake da Comprendere la sincronizzazione del magazzino dati in Klaviyo dopo la migrazione. Quello script usa CREATE OR REPLACE TABLE, che sostituirebbe la tabella ibrida con una tabella standard vuota.
Tieni presente quanto segue su base continuativa:
- Quota di archiviazione: sei limitato a 2 TB di dati di tabelle ibride per database Snowflake. Se la superi, le scritture in ogni tabella ibrida in quel database vengono bloccate finché non riporti l’utilizzo al di sotto della quota; in caso contrario, la sincronizzazione di Klaviyo non andrà a buon fine.
- Quota di richieste: circa 16.000 operazioni al secondo per database per un carico di lavoro bilanciato con 80% di letture/20% di scritture.
- Nessun fail-safe, Time Travel limitato: UNDROP non è supportato per le tabelle ibride. Mantieni un processo di backup autonomo, se ti serve.
- Nessuna cache dei risultati: le query sulle tabelle ibride non utilizzano la cache dei risultati delle query persistenti di Snowflake.
- Costo: l’archiviazione e le richieste delle tabelle ibride vengono misurate separatamente rispetto all’archiviazione delle tabelle standard e al calcolo. Prima di eseguire la migrazione di una tabella di grandi dimensioni, consulta la documentazione sui costi di Snowflake.
Risorse aggiuntive
- Come funziona la sincronizzazione del magazzino dati in Klaviyo
- Collegare Klaviyo e Snowflake
- Snowflake: tabelle ibride
- Snowflake: Crea tabelle ibride
- Snowflake: Limitazioni e funzionalità non supportate per le tabelle ibride
- Snowflake: Valuta i costi per le tabelle ibride
- Snowflake: Conversione di tabelle Snowflake standard in tabelle ibride