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.

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;

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

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

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.

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;

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.

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

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

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;

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.

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

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:

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

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

Conferma che la nuova tabella sia davvero ibrida, quindi verifica a campione una lettura puntuale rispetto alla stessa query sulla tabella standard:

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

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;

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.

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;

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:

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

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;

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.

text
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

Questo articolo è stato utile?
Usa questo modulo solo per il feedback sull'articolo. Scopri come contattare l'assistenza.

Esplora altri contenuti di Klaviyo

Community
Entra in contatto con altre aziende simili, partner ed esperti di Klaviyo per trovare ispirazione, condividere approfondimenti e ottenere risposte a tutte le tue domande.
Partner
Assumi un esperto certificato Klaviyo per aiutarti con un compito specifico o per la gestione continua del marketing.
Assistenza

Accedi all'assistenza tramite il tuo account.

Assistenza via e-mail (prova gratuita e account a pagamento) Disponibile 24 ore su 24, 7 giorni su 7

Chat/assistente virtuale
La disponibilità può variare in base alla località e al tipo di piano