Przewodnik po optymalizacji tabeli zdarzeń w Snowflake
Czego się dowiesz?
Ten przewodnik omawia dwie zalecane optymalizacje Snowflake dla tabeli zdarzeń Klaviyo. Te zmiany mają na celu ograniczenie szerokich skanów tabeli i pomóc Snowflake skupić się na odpowiednich rekordach zdarzeń i zakresach czasu podczas synchronizacji.
- Włącz Search Optimization na potrzeby wyszukiwań równościowych po id. Wymaga to Snowflake Enterprise Edition lub wyższej.
- Skup tabelę zdarzeń według daty zdarzenia. Działa to w każdej edycji Snowflake i należy to zrobić niezależnie od tego, czy możesz też ukończyć krok Optymalizacja wyszukiwania.
Kilka słów na początek
Potwierdź poniższe informacje ze swoim zespołem ds. platformy danych:
- Niezależnie od tego, czy twoje konto Snowflake jest w edycji Enterprise lub wyższej, jeśli planujesz wykonać krok 3 (optymalizacja wyszukiwania). Klasteryzacja w kroku 4 działa w każdej edycji Snowflake i należy ją wykonać niezależnie od tego.
- Masz uprawnienia do modyfikowania tabeli zdarzeń i włączania funkcji optymalizacji na poziomie tabeli.
- Znasz w pełni kwalifikowaną nazwę tabeli zdarzeń Klaviyo w swoim środowisku.
- Tabela zdarzeń zawiera kolumnę id, a kolumna znacznika czasu zdarzenia ma nazwę DATETIME lub inną równoważną nazwę.
- Masz zaplanowane okno testowe, zwłaszcza jeśli trwa obecnie synchronizacja historyczna.
Nazwy tabel w tym przewodniku są przykładami. Zastąp <EVENTS_TABLE> dokładną nazwą bazy danych, schematu i tabeli na Twoim koncie.
Krok 1: zidentyfikuj i zweryfikuj tabelę zdarzeń
- Otwórz arkusz roboczy Snowflake, używając roli z wymaganymi uprawnieniami.
- Potwierdź dokładny identyfikator tabeli używany przez Twoją integrację z Klaviyo.
- Sprawdź, czy tabela zawiera oczekiwane kolumny wyszukiwania i znacznika czasu.
Na przykład:
DESCRIBE TABLE <EVENTS_TABLE>; Potwierdź, że:
- id to identyfikator zdarzenia używany do wyszukiwań równościowych.
- DATETIME to znacznik czasu zdarzenia lub wskaż równoważną kolumnę ze znacznikiem czasu, której użyjesz w wyrażeniu klasteryzacji.
Krok 2: Utwórz punkt odniesienia (opcjonalnie)
Zanim zastosujesz zmiany, zapisz wystarczająco dużo informacji, aby później porównać wyniki:
- Aktualny status i czas trwania synchronizacji.
- Czy synchronizacja jest historyczna, czy przyrostowa.
- Magazyn danych Snowflake używany przez integracje.
- Przybliżona liczba wykorzystanych kredytów lub zasobów obliczeniowych w ramach ostatniej aktywności synchronizacji.
- Wszelkie odpowiednie identyfikatory zapytań, komunikaty o błędach lub znaczniki czasu z historii zapytań Snowflake.
Jeśli synchronizacja historyczna trwa wyjątkowo długo, skoordynuj działania z Klaviyo, zanim ją wstrzymasz lub uruchomisz ponownie.
Krok 3: włącz optymalizację wyszukiwania dla identyfikatora zdarzenia (opcjonalnie)
Optymalizacja wyszukiwania wymaga Snowflake Enterprise Edition lub wyższej. Jeśli Twoje konto jest w wersji Standard Edition, pomiń ten krok i przejdź do kroku 4 — klastrowanie nie ma wymagań dotyczących wersji i należy je wykonać niezależnie od tego.
Uruchom poniższe polecenie po zastąpieniu symbolu zastępczego rzeczywistą nazwą tabeli:
ALTER TABLE <EVENTS_TABLE>
ADD SEARCH OPTIMIZATION ON EQUALITY(id); Na przykład, jeśli tabela nazywa się klaviyo_events:
ALTER TABLE klaviyo_events
ADD SEARCH OPTIMIZATION ON EQUALITY(id); To tworzy zoptymalizowaną ścieżkę dostępu dla predykatów równościowych na id, co ma na celu zmniejszenie ilości danych z tabeli zdarzeń, które Snowflake musi skanować na potrzeby ukierunkowanych wyszukiwań.
Jeśli optymalizacja wyszukiwania jest już włączona dla identyfikatora, nie twórz zduplikowanej konfiguracji. Zamiast tego potwierdź istniejącą konfigurację z administratorem Snowflake.
Krok 4: dodaj klastrowanie oparte na dacie do tabeli zdarzeń
Zastosuj klucz klastrowania na podstawie części daty znacznika czasu zdarzenia:
ALTER TABLE <EVENTS_TABLE>
CLUSTER BY (TO_DATE(DATETIME)); Na przykład:
ALTER TABLE KLAVIYO_EVENT
CLUSTER BY (TO_DATE(DATETIME)); Użyj kolumny znacznika czasu potwierdzonej w kroku 1. Jeśli Twoja kolumna ma inną nazwę, podstaw tę kolumnę w wyrażeniu.
Klastrowanie oparte na dacie ma pomóc Snowflake odfiltrowywać niepowiązane zakresy czasu zamiast skanować całą tabelę zdarzeń.
Krok 5: Pozwól, aby konserwacja Snowflake została ukończona
Po pomyślnym wykonaniu obu instrukcji:
- Daj Snowflake czas na zbudowanie lub utrzymanie struktur wyszukiwania i klastrowania.
- Unikaj oceniania wyniku na podstawie pierwszego zapytania od razu po wykonaniu instrukcji DDL.
- Kontynuuj monitorowanie użycia magazynu i wydajności zapytań, podczas gdy tabela jest konserwowana.
Wymagany czas zależy od rozmiaru tabeli, istniejącego układu danych i obciążenia Snowflake.
Krok 6: Powiadom Klaviyo
Prześlij do Klaviyo następujące informacje:
- W pełni kwalifikowana nazwa tabeli zdarzeń.
- Znacznik czasu, kiedy każde polecenie zostało zastosowane.
- Potwierdzenie, że optymalizacja wyszukiwania została włączona dla id.
- Potwierdzenie, że zastosowano klastrowanie oparte na dacie.
- Konto/region Snowflake i magazyn użyte do synchronizacji.
- Wszelkie istotne ID synchronizacji, ID zapytania lub szczegóły błędu.
Klaviyo sprawdzi, czy po stronie eksportu jest wymagana jakakolwiek konfiguracja, aby w pełni wykorzystać optymalizację tabeli zdarzeń.
Krok 7: uruchom kontrolowaną synchronizację walidacyjną (opcjonalnie)
W miarę możliwości zweryfikuj to za pomocą synchronizacji przyrostowej lub innej ograniczonej synchronizacji przed ponownym uruchomieniem dużego historycznego uzupełniania.
Porównaj nowe uruchomienie z punktem odniesienia z kroku 2:
- Czas rozpocząć przetwarzanie.
- Całkowity czas trwania synchronizacji.
- Zachowanie postępu w interfejsie użytkownika Klaviyo.
- Liczba przeskanowanych bajtów w Snowflake.
- Zużyte kredyty magazynu danych.
- Czy synchronizacja kończy się bez ponownych prób lub powtórzeń pracy.
Najmocniejszym sygnałem jest poprawa zarówno czasu trwania synchronizacji, jak i wykorzystania zasobów obliczeniowych Snowflake, a nie jednej metryki rozpatrywanej osobno.
Krok 8: monitoruj kolejne synchronizacje
Śledź kilka kolejnych synchronizacji, zamiast polegać na pojedynczym uruchomieniu. Zwróć uwagę na:
- Stabilne lub malejące zużycie zasobów obliczeniowych, gdy tabela zdarzeń rośnie.
- Mniej szerokich skanów danych historycznych.
- Bardziej przewidywalny czas trwania synchronizacji.
- Brak wzrostu liczby nieudanych lub powtórzonych zapytań.
Udostępnij wyniki Klaviyo, uwzględniając identyfikatory zapytań przed i po (jeśli są dostępne).
Rozwiązywanie problemów
Instrukcja optymalizacji wyszukiwania nie działa
Sprawdź, czy:
- Konto Snowflake obsługuje tę funkcję.
- Rola wykonawcza ma uprawnienia do modyfikowania tabeli.
- Nazwa tabeli i kolumna identyfikatora są prawidłowe.
- Optymalizacja wyszukiwania nie jest jeszcze skonfigurowana dla żądanej kolumny.
Instrukcja klastrowania nie powiodła się
Sprawdź, czy:
- Nazwa tabeli jest poprawna.
- Kolumna znacznika czasu istnieje i jest zgodną wartością znacznika czasu lub daty.
- Rola wykonująca może zmienić tabelę.
- Wyrażenie klastrowania jest zgodne z rzeczywistym polem znacznika czasu zdarzenia.
Synchronizacja nadal jest wolna lub wygląda na zawieszoną
Wyślij do Klaviyo:
- Dokładne definicje tabel i użyte instrukcje.
- Czas zastosowania każdej zmiany.
- Godzina rozpoczęcia synchronizacji i bieżący status.
- Identyfikatory zapytań Snowflake i użycie magazynu danych.
- Wszelkie dowody na to, że status w interfejsie użytkownika nie postępuje.
Nie usuwaj optymalizacji tylko dlatego, że pierwsza synchronizacja nie przynosi poprawy. Najpierw potwierdź, że Snowflake ukończył odpowiednie prace konserwacyjne i że Klaviyo zweryfikowało konfigurację po stronie eksportu.
Lista kontrolna ukończenia
- Zidentyfikowano poprawną tabelę zdarzeń.
- Kolumny id i znacznika czasu zdarzenia potwierdzone.
- Zapisano bazowe metryki synchronizacji i obliczeń (opcjonalnie).
- Optymalizacja wyszukiwania włączona dla wyszukiwań równościowych po identyfikatorze (opcjonalnie).
- Tabela zdarzeń pogrupowana według daty zdarzenia.
- Klaviyo powiadomiono o zmianach.
- Zakończono synchronizację kontrolowanej walidacji.
- Dalsza wydajność synchronizacji i wykorzystanie zasobów obliczeniowych zostały sprawdzone (opcjonalnie).