Advanced Klaviyo Data Platform ingår inte i Klaviyo:s standardmarknadsföringsapplikation, och en prenumeration krävs för att få tillgång till tillhörande funktionalitet. Gå till vår faktureringsguide för att lära dig mer om hur du köper detta abonnemang.

 

I den här artikeln använder vi termen "tabell", men vyer, materialiserade vyer och tabeller är alla giltiga Snowflake-objekt som kan importeras. Så länge Klaviyo kan köra SELECT col1 FROM table_name på objektet är du fri att använda vad du än föredrar. 

Nyckelorden "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", och "OPTIONAL" i detta dokument ska tolkas enligt beskrivningen i RFC 2119.

Snowflake Administratör Inställning

Snowflake Administratör Inställning

I det här avsnittet beskrivs de steg som du måste följa i din Snowflake-miljö för att Klaviyo ska kunna importera dina data. 

  1. Generera en privat nyckel genom att köra följande kommando i din lokala terminal:
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
  1. Generera en publik nyckel som refererar till den privata nyckeln genom att köra följande kommando i terminalen:
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
  1. Kopiera rsa_key.pub och klistra in den i skriptet nedan för att ersätta platshållaren ' GENERATE_PUBLIC_KEY' för user_rsa_public_key. Skriptet nedan fungerar för Mac-användare, eller så kan du öppna rsa_key.pub i en IDE och kopiera hela innehållet i filen om du föredrar det. 
# Mac terminal-kommando för att skriva nyckeln till din terminal och kopiera den till urklipp
cat rsa_key.pub | tee /dev/tty | pbcopy
  1. Kör följande skript i din Snowflake-miljö för att skapa en serviceanvändare som Klaviyo kan använda. Du måste ha behörigheterna securityadmin och sysadmin för att kunna slutföra installationen nedan. Om du vill granska vilka roller du har kör du SHOW GRANTS TO USER <your_username> och kontrollerar att du har båda rollerna listade. Kontakta en systemadministratör om du behöver få din roll justerad.
    1. Du får gärna uppdatera någon av de variabler som ställdes in i början av skriptet.
    2. Sammanfattningsvis kommer du att:
      1. Välj ett befintligt lager eller skapa ett nytt
      2. Välj en befintlig databas eller skapa en ny för de nya schemana
      3. Skapa två nya scheman KLAVIYO_TMP och KLAVIYO_IMPORT_FROM_DWH
      4. Skapa en ny nätverkspolicy och tillåt lista Klaviyo IP-adresser
      5. Skapa en användare och en roll för Klaviyo
    3. Detta skript är idempotent (kan köras flera gånger), men kommer inte att skriva över befintliga objekt med motstridiga namn. 
BEGIN;

-- skapa variabler för användare / lösenord / roll / lager / databas. 
-- Ändra dessa till vad du föredrar.
SET role_name = "KLAVIYO_DATA_TRANSFER_ROLE"; -- alla bokstäver måste vara versaler, t.ex. 'KLAVIYO_DATA_TRANSFER_ROLE'
SET user_name = 'KLAVIYO_DATA_TRANSFER_USER'; -- alla bokstäver måste vara versaler, t.ex. 'KLAVIYO_DATA_TRANSFER_USER'
SET warehouse_name = 'KLAVIYO_DATA_TRANSFER_WAREHOUSE'; -- alla bokstäver måste vara versaler, t.ex. "KLAVIYO_DATA_TRANSFER_WAREHOUSE"
SET database_name = "KLAVIYO_DATABASE"; -- alla bokstäver måste vara versaler, t.ex. "KLAVIYO_DATABAS". Om databasen inte finns kommer en ny att skapas.
SET network_policy = "KLAVIYO_DATA_TRANSFER_NETWORK_POLICY"; -- alla bokstäver måste vara versaler, t.ex. 'KLAVIYO_NETWORK_POLICY'
SET network_rule = 'KLAVIYO_DATA_TRANSFER_NETWORK_RULE'; -- alla bokstäver måste vara versaler, t.ex. 'KLAVIYO_NETWORK_RULE'
/* ersätt GENERATE_PUBLIC_KEY nedan med genererad offentlig nyckel */

-- DO NOT CHANGE
SET schema_name_tmp = $database_name || '.KLAVIYO_TMP'; -- DO NOT CHANGE
SET schema_name_import = $database_name || '. KLAVIYO_IMPORT_FROM_DWH'; -- ÄNDRA INTE
SET full_network_rule_tmp = $schema_name_tmp || '.' || $network_rule; -- ÄNDRA INTE  || $network_rule; -- DO NOT CHANGE
SET full_network_rule_import = $schema_name_import || '.' || $network_rule; -- DO NOT CHANGE


-- ändra roll till sysadmin för lager-/databassteg
USE ROLE sysadmin;

-- skapa ett lager för dataöverföringstjänsten
CREATE WAREHOUSE IF NOT EXISTS IDENTIFIER($warehouse_name)
 warehouse_size = xsmall
 warehouse_type = standard
 auto_suspend = 60
 auto_resume = true
 initially_suspended = true;

-- skapa databas för dataöverföringstjänsten
CREATE DATABASE IF NOT EXISTS IDENTIFIER($database_name);

-- skapa scheman för dataöverföringstjänsten
CREATE SCHEMA IF NOT EXISTS IDENTIFIER($schema_name_tmp);
CREATE SCHEMA IF NOT EXISTS IDENTIFIER($schema_name_import);

-- ändra roll till securityadmin för användar-/rollsteg
USE ROLE securityadmin;

-- skapa nätverk  regel och policy för databas
GRANT USAGE ON DATABASE IDENTIFIER($database_name) TO ROLE securityadmin;
GRANT USAGE, CREATE NETWORK RULE ON SCHEMA IDENTIFIER($schema_name_tmp) TO ROLE securityadmin;
GRANT USAGE, CREATE NETWORK RULE ON SCHEMA IDENTIFIER($schema_name_import) TO ROLE securityadmin;

-- whitelist Klaviyo ip ranges, for KLAVIYO_TMP schema 
CREATE NETWORK RULE IF NOT EXISTS IDENTIFIER($full_network_rule_tmp)
 type = IPV4
 value_list = (
 '184.72.183.187/32', '52.206.71.52/32', '3.227.146.32/32', '44.198.39.11/32', '35.172.58.121/32', '3.228.37.244/32', '54.88.219.8/32', '3.214.211.176/32'
 )
 comment = 'Klaviyo IP Ranges as of April 2025';
CREATE NETWORK POLICY IF NOT EXISTS IDENTIFIER($network_policy)
 allowed_network_rule_list = ($full_network_rule_tmp);

-- vitlista Klaviyo ip-områden, för KLAVIYO_IMPORT_FROM_DWH schema 
CREATE NETWORK RULE IF NOT EXISTS IDENTIFIER($full_network_rule_import)
 type = IPV4
 value_list = (
 '184.72.183.187/32', '52.206.71.52/32', '3.227.146.32/32', '44.198.39.11/32', '35.172.58.121/32', '3.228.37.244/32', '54.88.219.8/32', '3.214.211.176/32'
 )
 comment = 'Klaviyo IP Ranges as of April 2025';
CREATE NETWORK POLICY IF NOT EXISTS IDENTIFIER($network_policy)
allowed_network_rule_list = ($full_network_rule_import);


-- skapa en roll för dataöverföringstjänsten
CREATE ROLE IF NOT EXISTS IDENTIFIER($role_name);
GRANT ROLE IDENTIFIER($role_name) TO ROLE sysadmin;

-- skapa en användare för dataöverföringstjänsten
CREATE USER IF NOT EXISTS IDENTIFIER($user_name)
 type = SERVICE
 network_policy = $network_policy
 default_role = $role_name
 default_warehouse = $warehouse_name
 rsa_public_key = "GENERATE_PUBLIC_KEY";
GRANT ROLE IDENTIFIER($role_name) TO USER IDENTIFIER($user_name);
ALTER USER IDENTIFIER($user_name) SET NETWORK_POLICY = $network_policy;

-- ge servicerollen tillgång till lagret
GRANT USAGE
 ON WAREHOUSE IDENTIFIER($warehouse_name)
 TO  ROLE IDENTIFIER($role_name);

-- grant service access to database
GRANT övervaka, USAGE
 ON DATABASE IDENTIFIER($database_name)
 TO ROLE IDENTIFIER($role_name);

-- Grant privileges for KLAVIYO_TMP 
GRANT USAGE ON SCHEMA IDENTIFIER($schema_name_tmp) TO ROLE IDENTIFIER($role_name);
GRANT övervaka, USAGE, CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE FUNCTION, CREATE PROCEDURE
 ON SCHEMA IDENTIFIER($schema_name_tmp)
 TO ROLE IDENTIFIER($role_name);
GRANT ALL ON FUTURE TABLES IN SCHEMA IDENTIFIER($schema_name_tmp) TO ROLE IDENTIFIER($role_name);

-- Ge privilegier för KLAVIYO_IMPORT_FROM_DWH
GRANT USAGE ON SCHEMA IDENTIFIER($schema_name_import) TO ROLE IDENTIFIER($role_name);
GRANT SELECT
 ON FUTURE TABLES
 IN SCHEMA IDENTIFIER($schema_name_import)
 TO ROLE IDENTIFIER($role_name);

COMMIT;
Uppsättning av Snowflake-data

Uppsättning av Snowflake-data

Ovan har du skapat två nya scheman. 

  • KLAVIYO_TMP kommer uteslutande att användas av Klaviyo. Du FÅR INTE ändra några tabeller som skapats i detta schema. Klaviyo kommer att ta bort dessa tabeller när de inte längre behövs.
  • KLAVIYO_IMPORT_FROM_DWH är där du ska webbutik dina slutliga tabeller för Klaviyo att importera. När du skapar en synk kommer alla tabeller i det här schemat att listas så att du kan välja mellan dem. Därför BÖR du bara webbutik de slutliga tabellerna du vill importera för att undvika förvirring under installationen. 

Alla tabeller som du vill importera till Klaviyo måste uppfylla följande kriterier. 

Krav på tidsstämpel 

Krav på tidsstämpel 

  1. Tabeller MÅSTE innehålla ett tidsstämpelfält som anger när raden skapades eller uppdaterades. Ofta kommer detta att vara inserted_at eller updated_at. Du ställer in detta för varje tabell när du skapar synkroniseringen.
    1. Tidsstämpelfältet MÅSTE vara monotont ökande (dvs. det måste alltid bli större eller förbli detsamma, aldrig bli mindre).
    2. När du har skapat en synkronisering får du INTE ställa in en rads tidsstämpelvärde till en tidpunkt i det förflutna, annars kanske Klaviyo inte hämtar den raden.
    3. Tidszonen för det här fältet är inte viktigt för Klaviyo, så länge du följer ovanstående krav
    4. Klaviyo rekommenderar att du ställer in tidsstämpelfältet med CURRENT_TIMESTAMP() eller en motsvarande funktion. Flera rader kan ha samma tidsstämpel. Se exempel nedan. 
INSERT INTO table_name AS 

SELECT ... 

, CURRENT_TIMESTAMP() AS inserted_at

... 
  1. Dina tidsstämplar MÅSTE vara i UTC eller innehålla information om tidszon. Om information om tidszon saknas kommer Klaviyo att anta UTC. För anpassade egenskaper förblir dessa tidsstämplar i strängformat, så att du kan tolka dem i den tidszon du föredrar.
Tabellstruktur 

Tabellstruktur 

  1. Tabeller BÖR behandlas som append-only (aka insert-only)
    1. Om du föredrar att uppdatera raderna på plats istället, MÅSTE du uppdatera tidsstämpelfältet så att Klaviyo kan identifiera ändringen.
  2. Tabeller BÖR beställas på din tidsstämpelkolumn. Snowflake hanterar klustring och partitionering baserat på din inmatningsorder. Detta kommer att bidra till att optimera Klaviyo:s importfrågor, vilket håller nere beräkningskostnaderna i Snowflake
En unik och konsekvent profil 

En unik och konsekvent profil 

  1. Du MÅSTE se till att varje profilegenskaper importeras från endast en datakälla (tabell). Klaviyo förhindrar att samma egenskap väljs från olika tabeller under skapandet av synkroniseringen, vilket förenklar detta krav.
  2. Du BÖR använda samma profilidentifierare (e-post, telefonnummer, externt ID etc.) i alla dina importtabeller för att minimera risken för att dubbla profiler skapas.
    1. Klaviyo kommer att skapa en ny profil om den profilidentifierare du anger inte matchar en befintlig profil inom Klaviyo.
    2. Exempel: Tabell1 (E-post, fav_color) + Tabell2 (Telefon, födelsedag)
      1. Detta kan skapa 2 profiler för samma person om profilen inte finns för närvarande. Om det finns en profil kommer Klaviyo att hantera profilupplösningen och uppdateringen internt. 
    3. Ett sätt att undvika detta problem är att bara använda en enda importtabell för alla dina profiler. 
Cirkulär Import-Export Loop Prevention 

Cirkulär Import-Export Loop Prevention 

  1. Du bör noggrant hantera scenarier där både import- och exportfunktioner används för att förhindra cirkulära import-export-loopar. Se till att din exportprocess inte matar tillbaka data till en tabell som ligger uppströms från din importtabell, eftersom Klaviyo för närvarande inte upptäcker detta scenario.
    1. Klaviyo har ännu inte någon logik för att upptäcka detta scenario.
    2. Detta skulle se ut ungefär som:
      1. Vid varje exportsynkroniseringscykel kommer Klaviyo att exportera alla dina profil
      2. Sedan lägger du till alla dina exporterade profiler i din importtabell genom en serie omvandlingar.
      3. Vid varje importsynkroniseringscykel kommer Klaviyo att läsa alla profiler i din importtabell, som så småningom kommer att återexporteras
    3. Scenarier där detta förmodligen är säkert 
      1. om du bara använder exporttabellen för att begränsa de rader som läggs till i din importtabell
      2. Om du kontrollerar att exporttabellen inte lägger till rader i din importtabell.
    4. Vilka är konsekvenserna av en cirkulär import-export-loop?
      1. Detta kommer att leda till onödiga beräkningskostnader för både dig och Klaviyo.

 

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.
Live-utbildning
Delta i en livesession med Klaviyo-experter för att lära dig om bästa praxis, hur man konfigurerar viktiga funktioner och mer.
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