Je Snowflake-profielexporttabel migreren naar een hybride tabel
Wat je leert
Ontdek hoe je de KLAVIYO_PROFILE-tabel waarnaar de export van Klaviyo's datawarehouse in Snowflake schrijft, kunt omzetten van een standaardtabel naar een Snowflake-hybride tabel, met de exacte opdrachten die je bij elke stap moet uitvoeren.
De exportsynchronisatie van Klaviyo schrijft bij elke periodieke run naar KLAVIYO_PROFILE met een MERGE (upsert). Hybride tabellen zijn een Snowflake-tabeltype dat is gebouwd voor puntgewijs lezen en schrijven met lage latentie op basis van indexen. Door te converteren verkort je de tijd en verlaag je de kosten van die MERGE-bewerkingen – dit geldt ongeacht hoe je de tabel daarna uitleest, dus het is de moeite waard, zelfs als je downstream alleen grote analytische scans en aggregaties uitvoert. Als je KLAVIYO_PROFILE ook gebruikt om afzonderlijke profiel-opvragingen te bedienen voor een applicatie, een API of een UI, levert een hybride tabel die opvragingen ook sneller op.
Advanced Klaviyo Data Platform is niet inbegrepen in Klaviyo's standaard marketingtoepassing en je hebt een abonnement nodig om toegang te krijgen tot de bijbehorende functies. Ga naar onze factureringsgids voor meer informatie over hoe je dit abonnement kunt aanschaffen.
Hybride tabellen zijn een Snowflake-functie, geen Klaviyo-functie. De exportsynchronisatie van Klaviyo schrijft naar KLAVIYO_PROFILE met standaard SQL en vereist geen specifiek tabeltype, maar hybride tabellen maken geen deel uit van Klaviyo's gedocumenteerde Snowflake-installatiescript. Voer deze migratie eerst uit op een niet-productiedatabase en houd er rekening mee dat Snowflake de opslag en verzoeken voor hybride tabellen anders meet dan voor standaardtabellen.
Voordat je van start gaat
Je hebt het volgende nodig:
- Een Snowflake-bestemming die al is geconfigureerd en aan het synchroniseren is. Zie Inzicht in datawarehouse-synchronisatie in Klaviyo.
- Een rol met CREATE TABLE in het schema met KLAVIYO_PROFILE (SYSADMIN in Klaviyo's setup script) en een rol die privileges kan verlenen (SECURITYADMIN).
- Een account dat hybride tabellen ondersteunt. Hybride tabellen zijn doorgaans alleen algemeen beschikbaar in commerciële AWS- en Microsoft Azure-regio's. Ze zijn niet beschikbaar op Google Cloud, in Amerikaanse SnowGov-regio's of in trial-accounts. Klanten van Virtual Private Snowflake moeten contact opnemen met Snowflake Support.
- Resterende ruimte onder Snowflake's quota van 2 TB voor hybride opslag per database.
Doorloop alle vier de onderstaande controles voordat je iets wijzigt.
1. Bevestig dat je account hybride tabellen ondersteunt
Vervang KLAVIYO_DATABASE en KLAVIYO_DATA_TRANSFER_WAREHOUSE door de namen die je in je Snowflake-installatiescript hebt ingesteld. Het script maakt de profieltabel aan op basis van een variabele $profile_table, dus vervang overal waar dit artikel verwijst naar KLAVIYO_PROFILE door de waarde die je daar hebt toegewezen.
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; Als een van beide statements mislukt, zijn hybride tabellen niet ingeschakeld voor je account of regio en moet je hier stoppen.
2. Bepaal de grootte van je profieltabel
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'; Hybride tabellen gebruiken rijgebaseerde primaire opslag, waardoor dezelfde data doorgaans meer ruimte inneemt dan in een kolomgebaseerde standaardtabel. Beschouw de SIZE_GB-waarde als een minimum, niet als een schatting, en houd ruimte over onder het quotum van 2 TB per database.
3. Controleren op dubbele of null-ID's
Klaviyo's set-upscript declareert al een primaire sleutel (ID) op de standaardtabel, maar Snowflake dwingt primaire sleutels niet af op standaardtabellen. Hybride tabellen dwingen die wel af, dus dubbele of null-ID's die eerder werden getolereerd, blokkeren nu het laden. Beide query's moeten 0 retourneren.
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; Als een van beide een waarde retourneert die niet gelijk is aan nul, los je het probleem met de datakwaliteit op in de standaardtabel voordat je doorgaat. Anders mislukt het laden in stap 2.
4. Controleer op downstream-afhankelijkheden
Hybride tabellen ondersteunen geen clustering keys, datadeling, dynamische tabellen, Fail-safe, gematerialiseerde views, Query Acceleration Service, replicatie, Search Optimization Service, Snowpipe, Snowpipe Streaming, streams of UNDROP. Time Travel wordt ondersteund met beperkingen.
SELECT
REFERENCING_DATABASE,
REFERENCING_SCHEMA,
REFERENCING_OBJECT_NAME,
REFERENCING_OBJECT_DOMAIN
FROM SNOWFLAKE.ACCOUNT_USAGE.OBJECT_DEPENDENCIES
WHERE REFERENCED_OBJECT_NAME = 'KLAVIYO_PROFILE'; Als iets verderop in de flow afhankelijk is van een niet-ondersteunde functie, bouw het opnieuw voordat je migreert.
Stap 1: je exportsynchronisatie pauzeren
Navigeer in Klaviyo naar Advanced Klaviyo Data Platform > Gegevensbeheer > Synchroniseren, klik op je Snowflake-bestemming, open het tabblad Periodiek en selecteer Pauzeren.
Wacht tot alle actieve synchronisaties de status Voltooid of Gepauzeerd hebben voordat je doorgaat. Als je migreert terwijl een synchronisatie naar de tabel schrijft, kunnen er rijen wegvallen.
Stap 2: maak de hybride tabel en laad deze
CREATE HYBRID TABLE ... AS SELECT vereist dat je het volledige kolommenschema expliciet opgeeft; het kan niet uit de SELECT worden afgeleid. Gebruik dezelfde kolomnamen en gegevenstypen als de bestaande tabel, zodat de sync van Klaviyo er zonder wijzigingen naar blijft schrijven.
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; - Je sessie moet een running warehouse hebben ingesteld, anders geeft CREATE HYBRID TABLE een foutmelding.
- PROPERTIES blijft een OBJECT-kolom. Semi-gestructureerde kolommen worden ondersteund in hybride tabellen, zolang ze niet worden geïndexeerd.
- CTA's naar een lege hybride tabel gebruiken het geoptimaliseerde bulkload-pad van Snowflake. In het Snowsight-queryprofiel wordt Aantal ingevoegde rijen weergegeven als Aantal rijen via bulkload wanneer het snelle pad wordt gebruikt.
- Als de instructie faalt op een constraint, is er een dubbele of null-ID door de controle hierboven geglipt. Los dit op in de standaardtabel en voer het opnieuw uit.
Een zeer grote tabel in batches laden
Als één CTAS te groot is om prettig te kunnen uitvoeren, maak je de hybride tabel leeg aan en laad je deze in plaats daarvan in datumbereiken. INSERT INTO ... SELECT gebruikt ook het geoptimaliseerde bulk-loadpad.
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; Pas de grenzen aan zodat ze bij je data passen en zorg dat de bereiken elkaar niet overlappen en geen gaten laten.
Stap 3: Secundaire indexen toevoegen
De primaire sleutel op ID wordt automatisch geïndexeerd. Voeg alleen secundaire indexen toe voor de kolommen waarop je daadwerkelijk filtert, omdat elke index opslag verbruikt en kosten toevoegt aan elke write. Als je profielen opzoekt op EMAIL of EXTERNAL_ID, indexeer dan die kolommen; als je ook filtert of sorteert op recentheid (bijvoorbeeld door profielen op te halen die sinds een bepaald moment zijn bijgewerkt), indexeer dan ook 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); Voeg geen UNIQUE-beperkingen toe aan EMAIL, PHONE_NUMBER of EXTERNAL_ID. Klaviyo-profielen kunnen in elk van deze kolommen een null-waarde of een herhaalde waarde hebben, en hybride tabellen dwingen UNIQUE-beperkingen af, waardoor je synchronisatie mislukt.
- Je kunt PROPERTIES niet indexeren. Semi-gestructureerde kolommen (variatie, OBJECT, ARRAY) kunnen niet worden geïndexeerd.
- UPDATED en CREATED zijn TIMESTAMP_NTZ, wat wordt ondersteund voor secundaire indexen. TIMESTAMP_TZ is dat niet.
- Indexen kunnen na het aanmaken niet worden gewijzigd en er kunnen geen kolommen aan worden toegevoegd. Verwijder de index en maak deze opnieuw aan om hem te wijzigen.
- Als een load "The value is too long for index" retourneert, verlaag dan het aantal geïndexeerde kolommen of de breedte van de geïndexeerde kolommen.
Zo bekijk je de indexen in de tabel:
SHOW INDEXES IN TABLE KLAVIYO_PROFILE_HYBRID; Stap 4: controleer de copy
Het aantal rijen moet overeenkomen en de verschilquery moet 0 retourneren.
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
); Bevestig dat de nieuwe tabel echt hybrid is en controleer vervolgens steekproefsgewijs of een point read overeenkomt met dezelfde query op de standaardtabel:
SHOW HYBRID TABLES LIKE 'KLAVIYO_PROFILE_HYBRID';
SELECT * FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE_HYBRID
WHERE EMAIL = 'someone@example.com'; Stap 5: de hybride tabel omwisselen
Hernoem de standaardtabel en zet die uit de weg in plaats van hem te verwijderen, zodat je een terugvaloptie hebt.
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; Privileges volgen het tabelobject, niet de tabelnaam. Na het hernoemen heeft je Klaviyo Service-rol geen privileges voor het nieuwe KLAVIYO_PROFILE en mislukt de synchronisatie totdat je stap 6 hebt voltooid.
Stap 6: Rechten opnieuw toekennen aan de Klaviyo-rol
Vervang de rolnaam door de rolnaam die je als role_name hebt ingesteld in je Snowflake-set-upscript.
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; Stap 7: hervat de synchronisatie en bevestig
Ga in Klaviyo terug naar Advanced Klaviyo Data Platform > Data management > Syncing, klik op je Snowflake-destination, open het tabblad Periodic en selecteer Hervatten.
Periodieke synchronisaties worden elk uur uitgevoerd. Nadat de volgende cyclus is voltooid, bevestig je dat de status Voltooid is en controleer je of gegevens worden binnengehaald:
SELECT
COUNT(*) AS ROW_COUNT,
MAX(UPDATED) AS LAST_UPDATED
FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE; Als de sync mislukt, open je de mislukte export op het tabblad Periodic om de foutensamenvatting, -code en het bericht te lezen dat door Snowflake is geretourneerd. Bekijk het gedeelte View error logs van Datawarehouse-syncing in Klaviyo begrijpen.
Terugdraaien
Als de synchronisatie met de hybride tabel mislukt en je moet terugdraaien, pauzeer dan de synchronisatie en wissel de tabellen weer terug.
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; Hervat daarna de synchronisatie. Klaviyo's volgende periodieke synchronisatie vult alles aan wat is gemaakt of bijgewerkt terwijl de tabel was omgewisseld.
Nadat je migreert
Zodra je vertrouwen hebt in de nieuwe tabel, verwijder je de back-up zodat die geen opslagkosten meer opbouwt.
USE ROLE SYSADMIN;
DROP TABLE KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE_STANDARD_BACKUP; Voer het instelscript voor de Snowflake-bestemming uit Meer informatie over het synchroniseren van datawarehouses in Klaviyo niet opnieuw uit na de migratie. Dat script gebruikt CREATE OR REPLACE TABLE, waardoor je hybride tabel wordt vervangen door een lege standaardtabel.
Houd het volgende continu in gedachten:
- Opslagquotum: je bent beperkt tot 2 TB aan hybride-tabelgegevens per Snowflake-database. Als je dit overschrijdt, worden writes naar elke hybride tabel in die database geblokkeerd totdat je het gebruik weer onder het quotum brengt, waardoor je Klaviyo-synchronisatie mislukt.
- Aanvraagquotum: Ongeveer 16.000 bewerkingen per seconde per database voor een evenwichtige workload van 80% lezen/20% schrijven.
- Geen fail-safe, beperkte Time Travel: UNDROP wordt niet ondersteund voor hybride tabellen. Houd je eigen back-upproces aan als je er een nodig hebt.
- Geen resultatencache: Query's op hybride tabellen gebruiken Snowflake's persistente queryresultatencache niet.
- Kosten: Opslag en verzoeken voor hybride tabellen worden afzonderlijk gemeten van standaard tabelopslag en compute. Bekijk Snowflake's kostendocumentatie voordat je een grote tabel migreert.
Extra hulpbronnen
- Gegevenssynchronisatie met datawarehouses begrijpen in Klaviyo
- Klaviyo en Snowflake verbinden
- Snowflake: Hybride tabellen
- Snowflake: Hybride tabellen maken
- Snowflake: Beperkingen en niet-ondersteunde functies voor hybride tabellen
- Snowflake: Kosten evalueren voor hybride tabellen
- Snowflake: standaard Snowflake-tabellen omzetten naar hybride tabellen