Snowflake-handleiding voor optimalisatie van gebeurtenissentabellen
Wat je leert
Deze handleiding neemt je mee door twee aanbevolen Snowflake-optimalisaties voor de Klaviyo-eventstabel. Deze wijzigingen zijn bedoeld om brede tabelscans te verminderen en Snowflake te helpen zich tijdens de synchronisatie te richten op de relevante eventrecords en tijdsbereiken.
- Schakel Search Optimization in voor gelijkheidslookups op id. Hiervoor is Snowflake Enterprise Edition of hoger vereist.
- Cluster de gebeurtenissentabel op de gebeurtenisdatum. Dit werkt op elke Snowflake-editie en moet je doen, ongeacht of je ook de stap Search Optimization kunt voltooien.
Voordat je van start gaat
Check het volgende met je dataplatformteam:
- Als je Snowflake-account Enterprise Edition of hoger is, en je van plan bent om stap 3 (zoekoptimalisatie) uit te voeren. Clustering in stap 4 werkt op elke Snowflake-editie en moet je sowieso doen.
- Je hebt toestemming om de eventtabel te wijzigen en optimalisatiefuncties op tabelniveau in te schakelen.
- Je weet wat de volledig gekwalificeerde naam is van de Klaviyo-events-tabel in jouw omgeving.
- De gebeurtenissentabel bevat een kolom id en de kolom met de tijdstempel van de gebeurtenis heet DATETIME of heeft een equivalente naam.
- Je hebt een gepland testvenster, vooral als er momenteel een historische synchronisatie wordt uitgevoerd.
De tabelnamen in deze handleiding zijn voorbeelden. Vervang <EVENTS_TABLE> door de exacte database-, schema- en tabelnaam in je account.
Stap 1: identificeer en valideer de gebeurtenissentabel
- Open een Snowflake-werkblad met een rol met de vereiste machtigingen.
- Bevestig de exacte tabel-id die door je Klaviyo-integraties wordt gebruikt.
- Controleer of de tabel de verwachte opzoek- en tijdstempelkolommen bevat.
Bijvoorbeeld:
DESCRIBE TABLE <EVENTS_TABLE>; Bevestig dat:
- id is de gebeurtenis-id die wordt gebruikt voor gelijkheidsopzoekingen.
- DATETIME is de tijdstempel van de gebeurtenis, of identificeer de equivalente tijdstempelkolom die je moet gebruiken in de clusteringexpressie.
Stap 2: Leg een baseline vast (optioneel)
Voordat je de wijzigingen doorvoert, leg je voldoende informatie vast om de resultaten achteraf te vergelijken:
- Huidige synchronisatiestatus en -duur.
- Of de sync historisch of incrementeel is.
- Snowflake-warehouse dat door de integratie wordt gebruikt.
- Geschatte credits of rekenverbruik gebruikt door recente synchronisatieactiviteit.
- Alle relevante query-ID's, foutmeldingen of tijdstempels uit de Snowflake-querygeschiedenis.
Als een historische synchronisatie ongebruikelijk lang duurt, stem dan met Klaviyo af voordat je deze pauzeert of opnieuw start.
Stap 3: schakel zoekoptimalisatie in voor de event-ID (optioneel)
Search Optimization vereist Snowflake Enterprise Edition of hoger. Als je account op Standard Edition staat, sla je deze stap over en ga je naar stap 4 — clusteren heeft geen editievereiste en moet je sowieso doen.
Voer de volgende instructie uit nadat je de tijdelijke aanduiding hebt vervangen door je daadwerkelijke tabelnaam:
ALTER TABLE <EVENTS_TABLE>
ADD SEARCH OPTIMIZATION ON EQUALITY(id); Als de tabel bijvoorbeeld klaviyo_events heet:
ALTER TABLE klaviyo_events
ADD SEARCH OPTIMIZATION ON EQUALITY(id); Dit creëert een geoptimaliseerd toegangspad voor gelijkheidsvoorwaarden op id, bedoeld om de hoeveelheid van de eventstabel te verminderen die Snowflake moet scannen voor gerichte zoekopdrachten.
Als Search Optimization al is ingeschakeld voor id, maak dan geen dubbele configuratie. Bevestig in plaats daarvan de bestaande configuratie bij je Snowflake-beheerder.
Stap 4: voeg op datum gebaseerde clustering toe aan de gebeurtenissentabel
Pas een clustering key toe op basis van het datumgedeelte van de event timestamp:
ALTER TABLE <EVENTS_TABLE>
CLUSTER BY (TO_DATE(DATETIME)); Bijvoorbeeld:
ALTER TABLE KLAVIYO_EVENT
CLUSTER BY (TO_DATE(DATETIME)); Gebruik de timestampkolom die je in stap 1 hebt bevestigd. Als je kolom een andere naam heeft, vervang je die kolom in de expressie.
Clustering op basis van datum is bedoeld om Snowflake te helpen niet-gerelateerde tijdsbereiken weg te snoeien in plaats van de volledige eventstabel te scannen.
Stap 5: laat Snowflake-onderhoud voltooien
Nadat beide statements zijn uitgevoerd:
- Geef Snowflake de tijd om de zoek- en clusterstructuren op te bouwen of te onderhouden.
- Beoordeel het resultaat niet meteen op basis van de eerste query direct na de DDL-instructies.
- Blijf het warehousegebruik en de queryprestaties monitoren terwijl de tabel wordt onderhouden.
De benodigde tijd hangt af van de tabelgrootte, de bestaande data-indeling en de Snowflake-workload.
Stap 6: Klaviyo op de hoogte stellen
Stuur Klaviyo de volgende gegevens:
- De volledig gekwalificeerde naam van de eventstabel.
- De tijdstempel waarop elke verklaring is toegepast.
- Bevestiging dat Search Optimization is ingeschakeld voor id.
- Bevestiging dat clustering op basis van datum is toegepast.
- Het Snowflake-account/de regio en het warehouse dat voor de sync wordt gebruikt.
- Alle relevante sync-ID, query-ID of foutdetails.
Klaviyo controleert of er configuratie aan de exportkant nodig is om optimaal gebruik te maken van de optimalisatie van de eventstabel.
Stap 7: Een gecontroleerde validatiesynchronisatie uitvoeren (optioneel)
Valideer waar mogelijk met een incrementele of anderszins beperkte synchronisatie voordat je een grote historische backfill opnieuw start.
Vergelijk de nieuwe run met de baseline uit stap 2:
- Tijd om te beginnen met verwerken.
- Totale synchronisatieduur.
- Progress-gedrag in de Klaviyo UI.
- Snowflake-bytes gescand.
- Verbruikte warehouse credits.
- Of de sync wordt voltooid zonder nieuwe pogingen of herhaald werk.
Het sterkste signaal is een verbetering in zowel de syncduur als Snowflake-compute, in plaats van één meetwaarde op zichzelf.
Stap 8: Monitor de volgende syncs
Volg meerdere opeenvolgende synchronisaties in plaats van op één uitvoering te vertrouwen. Let op:
- Stabiel of afnemend compute naarmate de eventtabel groeit.
- Minder brede scans van historische gegevens.
- Voorspelbaardere synchronisatieduur.
- Geen toename van mislukte of herhaalde queries.
Deel de resultaten met Klaviyo, inclusief query-ID's van vóór en na wanneer beschikbaar.
Probleemoplossing
De Search Optimization-instructie mislukt
Controleer of:
- De Snowflake-account ondersteunt de functies.
- De uitvoerende rol heeft toestemming om de tabel te wijzigen.
- De tabelnaam en de id-kolom zijn correct.
- Zoekoptimalisatie is nog niet geconfigureerd voor de aangevraagde kolom.
De clustering-instructie mislukt
Controleer of:
- De tabelnaam is correct.
- De tijdstempelkolom bestaat en een compatibele tijdstempel- of datumwaarde is.
- De uitvoerende rol kan de tabel wijzigen.
- De clusteringexpressie komt overeen met het daadwerkelijke timestampveld van events.
De synchronisatie is nog steeds traag of lijkt vast te zitten
Verzend Klaviyo:
- De exacte tabeldefinities en -instructies die zijn gebruikt.
- Het tijdstip waarop elke wijziging is toegepast.
- De starttijd en huidige status van de synchronisatie.
- Snowflake-query-ID's en warehouse-gebruik.
- Elk teken dat de status in de UI niet vordert.
Verwijder de optimalisaties niet alleen omdat de eerste synchronisatie niet verbetert. Controleer eerst of Snowflake het relevante onderhoud heeft voltooid en of Klaviyo de configuratie aan de exportkant heeft geverifieerd.
Checklist voor afronding
- Correcte gebeurtenissentabel geïdentificeerd.
- id- en event-timestampkolommen bevestigd.
- Baseline-synchronisatie en compute-meetwaarden vastgelegd (optioneel).
- Zoekoptimalisatie ingeschakeld voor gelijkheidslookups op id (optioneel).
- Eventstabel geclusterd op eventdatum.
- Klaviyo op de hoogte gebracht van de wijzigingen.
- Gecontroleerde validatiesync voltooid.
- Prestaties en compute van de vervolg-sync beoordeeld (optioneel).