Du kommer att lära dig

Läs mer om hur du konverterar tabellen KLAVIYO_PROFILE, som Klaviyos export till datalager skriver till i Snowflake, från en standardtabell till en Snowflake-hybridtabell, med exakta kommandon att köra i varje steg.

Klaviyo exportsynk skriver till KLAVIYO_PROFILE med en MERGE (upsert) vid varje periodisk körning. Hybrida tabeller är en Snowflake-tabelltyp som är byggd för punktläsningar och skrivningar med låg latens, indexbaserat, så en konvertering minskar tiden och kostnaden för dessa MERGE-operationer – detta gäller oavsett hur du läser tabellen efteråt, så det är värt att göra även om du bara kör stora analytiska skanningar och aggregeringar längre fram i flödet. Om du också använder KLAVIYO_PROFILE för att hantera enskilda profilüppslagningar till en applikation, ett API eller ett användargränssnitt, returnerar en hybridtabell de uppslagningarna snabbare också.

Advanced Klaviyo Data Platform ingår inte i Klaviyos standardmarknadsföringsapplikation och en prenumeration krävs för att få tillgång till tillhörande funktionalitet. Gå till vår faktureringsguide om du vill läsa mer om hur du köper det här abonnemanget.

Hybrida tabeller är en Snowflake-funktion, inte en Klaviyo-funktion. Klaviyo's exportsynk skriver till KLAVIYO_PROFILE med standard-SQL och kräver ingen specifik tabelltyp, men hybrida tabeller ingår inte i Klaviyo's dokumenterade Snowflake-konfigurationsskript. Kör den här migreringen mot en icke-produktionsdatabas först och tänk på att Snowflake mäter lagring och förfrågningar för hybrida tabeller på ett annat sätt än för standardtabeller.

Innan du börjar

Du kommer att behöva allt följande:

  • En Snowflake-destination som redan är konfigurerad och synkar. Se Förstå synkning av datalager i Klaviyo.
  • En roll med CREATE TABLE på schemat som innehåller KLAVIYO_PROFILE (SYSADMIN i Klaviyo installationsskript) och en roll som kan bevilja behörigheter (SECURITYADMIN).
  • Ett Konto som stöder hybrida tabeller. Hybrida tabeller är i regel allmänt tillgängliga endast i kommersiella AWS- och Microsoft Azure-regioner. De är inte tillgängliga på Google Cloud, i amerikanska SnowGov-regioner eller i testkonton. Kunder med Virtual Private Snowflake måste kontakta Snowflake Support.
  • Utrymme kvar under Snowflakes kvot på 2 TB för hybridlagring per databas.

Gå igenom alla fyra kontrollerna nedan innan du ändrar något.

1. Bekräfta att ditt konto har stöd för hybrida tabeller

Ersätt KLAVIYO_DATABASE och KLAVIYO_DATA_TRANSFER_WAREHOUSE med namnen du angav i ditt Snowflake-installationsskript. Skriptet skapar profiltabellen från variabeln $profile_table, så ersätt med det värde du tilldelade där överallt där den här artikeln hänvisar till 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;

Om någon av satserna misslyckas är hybrida tabeller inte aktiverade för ditt Konto eller din region och du bör stanna här.

2. Dimensionera din profiltabell

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

Hybrida tabeller använder radbaserad primär lagring, så samma data tar vanligtvis upp mer utrymme än i en kolumnbaserad standardtabell. Behandla siffran SIZE_GB som ett golv, inte som en uppskattning, och lämna utrymme under databaskvoten på 2 TB per databas.

3. Kontrollera om det finns dubblerade eller null-ID:n

Klaviyos installationsskript deklarerar redan primärnyckel (ID) i standardtabellen, men Snowflake upprätthåller inte primärnycklar i standardtabeller. Hybrida tabeller upprätthåller dem, så dubblett-ID:n eller null-ID:n som tidigare tolererades kommer nu att stoppa inläsningen. Båda frågorna måste returnera 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;

Om något av dem returnerar ett värde som inte är noll ska du åtgärda datakvalitetsproblemet i standardtabellen innan du fortsätter. Annars misslyckas inläsningen i steg 2.

4. Kontrollera beroenden nedströms

Hybridtabeller stöder inte klustringsnycklar, datadelning, dynamiska tabeller, Fail-safe, materialiserade vyer, Query Acceleration Service, replikering, Search Optimization Service, Snowpipe, Snowpipe Streaming, strömmar eller UNDROP. Time Travel stöds med begränsningar.

text
SELECT
    REFERENCING_DATABASE,
    REFERENCING_SCHEMA,
    REFERENCING_OBJECT_NAME,
    REFERENCING_OBJECT_DOMAIN
FROM SNOWFLAKE.ACCOUNT_USAGE.OBJECT_DEPENDENCIES
WHERE REFERENCED_OBJECT_NAME = 'KLAVIYO_PROFILE';

Om något längre ned i kedjan förlitar sig på en funktion som inte stöds, bygg om det innan du migrerar.

Steg 1: pausa din exportsynk

I Klaviyo går du till Advanced Klaviyo Data Platform > Data management > Syncing, klickar in på din Snowflake-destination, öppnar fliken Periodic och väljer Pausa.

Vänta tills en pågående synk visar statusen Completed eller Paused innan du fortsätter. Migrering medan en synk skriver till tabellen kan göra att rader försvinner.

Steg 2: skapa hybridtabellen och läs in den

CREATE HYBRID TABLE ... AS SELECT kräver att du uttryckligen deklarerar hela kolumnschemat; det kan inte härledas från SELECT. Använd samma kolumnnamn och datatyper som i den befintliga tabellen så att Klaviyos synk fortsätter att skriva till den utan ändringar.

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;
  • Din session måste ha ett lager som körs angivet, annars returnerar CREATE HYBRID TABLE ett fel.
  • PROPERTIES förblir en OBJECT-kolumn. Semistrukturerade kolumner stöds i hybridtabeller så länge de inte är indexerade.
  • CTAS till en tom hybridtabell använder Snowflakes optimerade massinläsningsväg. I Snowsight-frågeprofilen visas Antal insatta rader som Antal rader massinlästa när den snabba vägen används.
  • Om satsen misslyckas på en begränsning har ett duplicerat eller null-ID slunkit igenom kontrollen ovan. Åtgärda det i standardtabellen och kör igen.

Ladda en mycket stor tabell i batchar

Om en enskild CTAS är för stor för att köra bekvämt kan du skapa den hybrida tabellen tom och i stället läsa in den i datumintervall. INSERT INTO ... SELECT använder också den optimerade bulk-inläsningsvägen.

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;

Justera gränserna så att de passar dina data och se till att intervallen varken överlappar varandra eller lämnar luckor.

Steg 3: Lägg till sekundära index

Den primära nyckeln på ID indexeras automatiskt. Lägg bara till sekundära index för de kolumner du faktiskt filtrerar på, eftersom varje index använder lagringsutrymme och ökar kostnaden för varje skrivning. Om du slår upp profiler via EMAIL eller EXTERNAL_ID ska du indexera de kolumnerna. Om du även filtrerar eller sorterar efter aktualitet (till exempel genom att hämta profiler som har uppdaterats sedan en viss tidpunkt) ska du även indexera 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);

Lägg inte till UNIQUE-begränsningar för EMAIL, PHONE_NUMBER eller EXTERNAL_ID. Klaviyo-profiler kan ha ett null- eller upprepat värde i någon av de här kolumnerna, och hybriddatabeller tillämpar UNIQUE-begränsningar, vilket gör att din synkronisering misslyckas.

  • Du kan inte indexera PROPERTIES. Halvstrukturerade kolumner (variation, OBJECT, ARRAY) kan inte indexeras.
  • UPDATED och CREATED är TIMESTAMP_NTZ, vilket stöds för sekundära index. TIMESTAMP_TZ gör det inte.
  • Index kan inte ändras eller få kolumner tillagda efter att de har skapats. Ta bort och återskapa indexet för att ändra det.
  • Om en inläsning returnerar "Värdet är för långt för index", minska antalet indexerade kolumner eller bredden på de indexerade kolumnerna.

Så här ser du indexen i tabellen:

text
SHOW INDEXES IN TABLE KLAVIYO_PROFILE_HYBRID;

Steg 4: validera kopian

Radantal måste matcha och differensfrågan måste returnera 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
);

Bekräfta att den nya tabellen verkligen är hybrid och gör sedan en stickprovskontroll av en punktläsning mot samma fråga i standardtabellen:

text
SHOW HYBRID TABLES LIKE 'KLAVIYO_PROFILE_HYBRID';

SELECT * FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE_HYBRID
WHERE EMAIL = 'someone@example.com';

Steg 5: Byt in hybridtabellen på plats

Byt namn på standardtabellen och flytta den ur vägen i stället för att ta bort den, så att du har en återställningsväg.

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;

Behörigheter följer tabellobjektet, inte tabellnamnet. Efter namnbytet har din Klaviyo Service-roll inga behörigheter för den nya KLAVIYO_PROFILE och synkningen misslyckas tills du slutför steg 6.

Steg 6: bevilja behörigheter på nytt till Klaviyo-rollen

Ersätt rollnamnet som du ställde in som role_name i Snowflake-konfigurationsskriptet.

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;

Steg 7: Återuppta synkroniseringen och bekräfta

Gå tillbaka till Advanced KDP > Data management > Syncing i Klaviyo, klicka på din Snowflake-destination, öppna fliken Periodic och välj Återuppta.

Periodiska synkroniseringar körs varje timme. När nästa cykel är klar bekräftar du att statusen är Slutförd och kontrollerar att data kommer in:

text
SELECT
    COUNT(*) AS ROW_COUNT,
    MAX(UPDATED) AS LAST_UPDATED
FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE;

Om synkroniseringen misslyckas öppnar du den misslyckade exporten på fliken Periodic för att läsa sammanfattningen av felet, felkoden och meddelandet som returnerades av Snowflake. Se avsnittet View error logs i Förstå synkronisering av datalager i Klaviyo.

Rulla tillbaka

Om synkroniseringen misslyckas mot hybridtabellen och du behöver återgå ska du pausa synkroniseringen och byta tillbaka tabellerna.

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;

Återuppta sedan synkroniseringen. Klaviyos nästa periodiska synkronisering fyller i allt som skapades eller uppdaterades medan tabellen byttes ut.

Efter att du migrerar

När du känner dig trygg med den nya tabellen tar du bort säkerhetskopian så att den slutar ackumulera lagringskostnader.

text
USE ROLE SYSADMIN;
DROP TABLE KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE_STANDARD_BACKUP;

Kör inte om installationsskriptet för Snowflake-destinationen från Förstå synkning till datalager i Klaviyo efter migreringen. Det skriptet använder CREATE OR REPLACE TABLE, vilket skulle ersätta din hybridtabell med en tom standardtabell.

Ha följande i åtanke löpande:

  • Lagringskvot: Du är begränsad till 2 TB hybridtabellsdata per Snowflake-databas. Om du överskrider den blockeras skrivningar till alla hybridtabeller i den databasen tills du minskar användningen så att den hamnar under kvoten, vilket gör att din Klaviyo-synk misslyckas.
  • Begärandekvot: cirka 16 000 åtgärder per sekund per databas för en balanserad arbetsbelastning med 80 % läsning/20 % skrivning.
  • Ingen felsäkring, begränsad Time Travel: UNDROP stöds inte för hybrida tabeller. Upprätthåll din egen säkerhetskopieringsprocess om du behöver en.
  • Ingen resultatcache: Frågor mot hybriddatabeller använder inte Snowflakes cache för beständiga frågeresultat.
  • Kostnad: Hybrid tabellagring och förfrågningar mäts separat från standardtabellagring och beräkning. Granska Snowflakes kostnadsdokumentation innan du migrerar en stor tabell.

Ytterligare resurser

Var den här artikeln till hjälp?
Använd endast detta formulär för feedback på artiklar. Lär dig hur du kontaktar support.

Utforska mer från Klaviyo

Community
Få kontakt med kollegor, partner och Klaviyo-experter för att hitta inspiration, dela insikter och få svar på alla dina frågor.
Partners
Anlita en Klaviyo-certifierad expert för att hjälpa dig med en specifik uppgift eller för löpande marknadsföringshantering.
Support

Få tillgång till support via ditt konto.

E-postsupport (gratis provperiod och betalkonton) Tillgänglig dygnet runt, alla dagar i veckan

Chatt/virtuell hjälp
Tillgängligheten varierar beroende på plats och abonnemangstyp