Migracja tabeli eksportu profili Snowflake do tabeli hybrydowej
Czego się dowiesz?
Dowiedz się, jak przekonwertować tabelę KLAVIYO_PROFILE, do której eksport z hurtowni danych Klaviyo zapisuje dane w Snowflake, ze standardowej tabeli na hybrydową tabelę Snowflake, wraz z dokładnymi poleceniami do uruchomienia na każdym etapie.
Synchronizacja eksportu Klaviyo zapisuje do KLAVIYO_PROFILE, wykonując MERGE (upsert) przy każdym cyklicznym uruchomieniu. Tabele hybrydowe to typ tabeli Snowflake stworzony z myślą o odczytach i zapisach punktowych o niskich opóźnieniach, opartych na indeksach, więc konwersja skraca czas i obniża koszt tych operacji MERGE — dotyczy to niezależnie od tego, jak później odczytujesz tabelę, więc warto to zrobić nawet wtedy, gdy dalej wykonujesz tylko duże skany analityczne oraz agregacje. Jeśli używasz też KLAVIYO_PROFILE do obsługi pojedynczych wyszukiwań profilu w aplikacji, API lub interfejsie użytkownika, tabela hybrydowa również zwraca te wyniki szybciej.
Zaawansowana platforma danych klientów Klaviyo nie jest zawarta w standardowej aplikacji marketingowej Klaviyo, a dostęp do powiązanych funkcji wymaga subskrypcji. Przejdź do naszego przewodnika po rozliczeniach, aby dowiedzieć się, jak kupić ten plan.
Tabele hybrydowe są funkcją Snowflake, a nie Klaviyo. Synchronizacja eksportu Klaviyo zapisuje dane do KLAVIYO_PROFILE za pomocą standardowego SQL i nie wymaga konkretnego typu tabeli, ale tabele hybrydowe nie są częścią udokumentowanego skryptu konfiguracji Snowflake w Klaviyo. Najpierw uruchom tę migrację na bazie danych nieprodukcyjnej i pamiętaj, że Snowflake inaczej mierzy wykorzystanie magazynu i żądania dla tabel hybrydowych niż dla tabel standardowych.
Kilka słów na początek
Będziesz potrzebować wszystkich poniższych elementów:
- Miejsce docelowe Snowflake, które jest już skonfigurowane i synchronizowane. Zobacz Omówienie synchronizacji z hurtownią danych w Klaviyo.
- Rola z uprawnieniem CREATE TABLE w schemacie, który zawiera KLAVIYO_PROFILE (SYSADMIN w skrypcie konfiguracyjnym Klaviyo), oraz rola, która może przyznawać uprawnienia (SECURITYADMIN).
- Konto obsługujące tabele hybrydowe. Tabele hybrydowe są ogólnie dostępne tylko w komercyjnych regionach AWS i Microsoft Azure. Nie są dostępne w Google Cloud, w regionach SnowGov w USA ani na kontach próbnych. Klienci Virtual Private Snowflake muszą skontaktować się z pomocą techniczną Snowflake.
- Zapas poniżej limitu 2 TB hybrydowego limitu pamięci masowej Snowflake na bazę danych.
Przejdź przez wszystkie cztery poniższe kontrole, zanim cokolwiek zmienisz.
1. Potwierdź, że Twoje konto obsługuje tabele hybrydowe
Zastąp KLAVIYO_DATABASE i KLAVIYO_DATA_TRANSFER_WAREHOUSE nazwami, które ustawisz w skrypcie konfiguracji Snowflake. Skrypt tworzy tabelę profili na podstawie zmiennej $profile_table, więc podmień na przypisaną tam wartość wszędzie tam, gdzie w tym artykule występuje KLAVIYO_PROFILE.
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; Jeśli którekolwiek z tych stwierdzeń jest fałszywe, tabele hybrydowe nie są włączone dla Twojego konta lub regionu i na tym etapie powinnaś/powinieneś zakończyć.
2. Zmień rozmiar tabeli profilu
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'; Tabele hybrydowe używają podstawowego magazynu danych opartego na wierszach, więc te same dane zazwyczaj zajmują więcej miejsca niż w standardowej tabeli kolumnowej. Traktuj wartość SIZE_GB jako wartość minimalną, a nie jako estymację, i zostaw zapas w ramach limitu 2 TB na bazę danych.
3. Sprawdź zduplikowane lub puste identyfikatory
Skrypt konfiguracji Klaviyo już deklaruje klucz główny (ID) w tabeli standardowej, ale Snowflake nie wymusza kluczy głównych w tabelach standardowych. Tabele hybrydowe je wymuszają, więc zduplikowane lub puste identyfikatory ID, które wcześniej były tolerowane, teraz zablokują ładowanie. Oba zapytania muszą zwracać 0.
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; Jeśli którakolwiek z nich zwróci wartość różną od zera, rozwiąż problem z jakością danych w tabeli standardowej, zanim przejdziesz dalej. W przeciwnym razie ładowanie w kroku 2 się nie powiedzie.
4. Sprawdź zależności downstream
Tabele hybrydowe nie obsługują kluczy klastrowania, udostępniania danych, tabel dynamicznych, Fail-safe, widoków zmaterializowanych, Query Acceleration Service, replikacji, Search Optimization Service, Snowpipe, Snowpipe Streaming, strumieni ani UNDROP. Time Travel jest obsługiwany z ograniczeniami.
SELECT
REFERENCING_DATABASE,
REFERENCING_SCHEMA,
REFERENCING_OBJECT_NAME,
REFERENCING_OBJECT_DOMAIN
FROM SNOWFLAKE.ACCOUNT_USAGE.OBJECT_DEPENDENCIES
WHERE REFERENCED_OBJECT_NAME = 'KLAVIYO_PROFILE'; Jeśli cokolwiek dalej w łańcuchu zależy od nieobsługiwanej funkcji, przebuduj to przed migracją.
Krok 1: Wstrzymaj synchronizację eksportu
W Klaviyo przejdź do Zaawansowana platforma danych klientów Klaviyo > Zarządzanie danymi > Synchronizacja, kliknij miejsce docelowe Snowflake, otwórz kartę Okresowe i wybierz Wstrzymaj.
Zanim przejdziesz dalej, poczekaj, aż każda trwająca synchronizacja będzie mieć status Ukończono lub Wstrzymano. Migracja, gdy synchronizacja zapisuje dane do tabeli, może spowodować utratę wierszy.
Krok 2: utwórz tabelę hybrydową i załaduj ją
CREATE HYBRID TABLE ... AS SELECT wymaga jawnego zadeklarowania pełnego schematu kolumn; nie można go wywnioskować z SELECT. Użyj tych samych nazw kolumn i typów danych co w istniejącej tabeli, aby synchronizacja Klaviyo nadal mogła zapisywać do niej dane bez zmian.
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; - Twoja sesja musi mieć ustawioną działającą hurtownię danych, inaczej CREATE HYBRID TABLE zwróci błąd.
- PROPERTIES pozostaje kolumną typu OBJECT. Kolumny częściowo ustrukturyzowane są obsługiwane w tabelach hybrydowych, o ile nie są indeksowane.
- CTAS w pustej tabeli hybrydowej korzysta z zoptymalizowanej ścieżki masowego ładowania w Snowflake. W profilu zapytania w Snowsight wartość Liczba wstawionych wierszy jest wyświetlana jako Liczba masowo załadowanych wierszy, gdy używana jest szybka ścieżka.
- Jeśli instrukcja nie powiedzie się z powodu ograniczenia, przez powyższą kontrolę prześlizgnął się zduplikowany lub pusty identyfikator. Popraw to w standardowej tabeli i uruchom ponownie.
Wczytywanie bardzo dużej tabeli partiami
Jeśli pojedyncza operacja CTAS jest zbyt duża, aby uruchomić ją bez problemów, utwórz pustą tabelę hybrydową i zamiast tego załaduj ją w zakresach dat. INSERT INTO ... SELECT również korzysta z zoptymalizowanej ścieżki zbiorczego ładowania.
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; Dostosuj granice do swoich danych i upewnij się, że zakresy ani nie nakładają się na siebie, ani nie pozostawiają luk.
Krok 3: Dodaj indeksy pomocnicze
Klucz główny w kolumnie ID jest indeksowany automatycznie. Dodawaj indeksy pomocnicze tylko dla kolumn, po których faktycznie filtrujesz, ponieważ każdy indeks zużywa miejsce na dane i zwiększa koszt każdego zapisu. Jeśli wyszukujesz profile po EMAIL lub EXTERNAL_ID, zaindeksuj te kolumny; jeśli dodatkowo filtrujesz lub sortujesz według „świeżości” (na przykład pobierając profile zaktualizowane od określonego czasu), zaindeksuj 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); Nie dodawaj ograniczeń UNIQUE do EMAIL, PHONE_NUMBER ani EXTERNAL_ID. Profile Klaviyo mogą mieć wartość null lub powtarzającą się wartość w dowolnej z tych kolumn, a tabele hybrydowe wymuszają ograniczenia UNIQUE, co spowodowałoby niepowodzenie synchronizacji.
- Nie możesz indeksować właściwości. Kolumny o częściowo ustrukturyzowanych danych (wariant, OBJECT, ARRAY) nie mogą być indeksowane.
- UPDATED i CREATED mają typ TIMESTAMP_NTZ, który jest obsługiwany dla indeksów pomocniczych. TIMESTAMP_TZ nie jest.
- Indeksy nie mogą być modyfikowane ani nie można dodawać do nich kolumn po utworzeniu. Aby wprowadzić zmiany, usuń indeks i utwórz go ponownie.
- Jeśli ładowanie zwraca komunikat "The value is too long for index", zmniejsz liczbę indeksowanych kolumn lub szerokość indeksowanych kolumn.
Aby zobaczyć indeksy w tabeli:
SHOW INDEXES IN TABLE KLAVIYO_PROFILE_HYBRID; Krok 4: zweryfikuj kopię
Liczby wierszy muszą się zgadzać, a zapytanie różnicowe musi zwracać 0.
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
); Potwierdź, że nowa tabela naprawdę jest hybrydowa, a następnie wyrywkowo sprawdź odczyt punktu na podstawie tego samego zapytania w standardowej tabeli:
SHOW HYBRID TABLES LIKE 'KLAVIYO_PROFILE_HYBRID';
SELECT * FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE_HYBRID
WHERE EMAIL = 'someone@example.com'; Krok 5: Podmień tabelę hybrydową na właściwe miejsce
Zmień nazwę tabeli standardowej, aby zrobić miejsce, zamiast ją usuwać — dzięki temu zachowasz możliwość wycofania zmian.
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; Uprawnienia są przypisane do obiektu tabeli, a nie do nazwy tabeli. Po zmianie nazwy twoja rola usługi Klaviyo nie ma żadnych uprawnień do nowej tabeli KLAVIYO_PROFILE, a synchronizacja nie powiedzie się, dopóki nie wykonasz kroku 6.
Krok 6: Ponownie przyznaj uprawnienia roli Klaviyo
Podstaw nazwę roli ustawioną jako role_name w skrypcie konfiguracji Snowflake.
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; Krok 7: Wznów synchronizację i potwierdź
W Klaviyo wróć do Zaawansowana platforma danych klientów Klaviyo > Zarządzanie danymi > Synchronizacja, kliknij docelowe miejsce Snowflake, otwórz kartę Okresowo i wybierz Wznów.
Synchronizacje okresowe uruchamiają się co godzinę. Po zakończeniu następnego cyklu potwierdź, że status to Ukończono, i sprawdź, czy dane się zapisują:
SELECT
COUNT(*) AS ROW_COUNT,
MAX(UPDATED) AS LAST_UPDATED
FROM KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE; Jeśli synchronizacja zakończy się błędem, otwórz nieudany eksport na karcie Periodic, aby przeczytać podsumowanie błędu, kod oraz komunikat zwrócony przez Snowflake. Zobacz sekcję View error logs w Zrozumienie synchronizacji z hurtownią danych w Klaviyo.
Wycofywanie zmian
Jeśli synchronizacja nie powiedzie się dla tabeli hybrydowej i musisz cofnąć zmiany, wstrzymaj synchronizację i zamień tabele z powrotem.
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; Następnie wznów synchronizację. Podczas kolejnej okresowej synchronizacji Klaviyo uzupełni dane o wszystko, co zostało utworzone lub zaktualizowane, gdy tabela była podmieniona.
Po migracji
Gdy będziesz już mieć pewność co do nowej tabeli, usuń kopię zapasową, aby przestała generować koszty przechowywania.
USE ROLE SYSADMIN;
DROP TABLE KLAVIYO_DATABASE.PUBLIC.KLAVIYO_PROFILE_STANDARD_BACKUP; Nie uruchamiaj ponownie skryptu konfiguracji miejsca docelowego Snowflake z Zrozum synchronizację hurtowni danych w Klaviyo po migracji. Ten skrypt używa polecenia CREATE OR REPLACE TABLE, które zastąpiłoby Twoją tabelę hybrydową pustą standardową tabelą.
Pamiętaj o tych kwestiach na bieżąco:
- Limit miejsca: masz limit 2 TB danych tabel hybrydowych na bazę danych Snowflake. Jeśli go przekroczysz, zapisy do każdej tabeli hybrydowej w tej bazie danych zostaną zablokowane do czasu, aż obniżysz wykorzystanie poniżej limitu, co spowoduje niepowodzenie synchronizacji Klaviyo.
- Limit żądań: Około 16 000 operacji na sekundę na bazę danych przy zrównoważonym obciążeniu 80% odczytu / 20% zapisu.
- Brak mechanizmu fail-safe, ograniczona funkcja Time Travel: UNDROP nie jest obsługiwane dla tabel hybrydowych. Jeśli go potrzebujesz, utrzymuj własny proces tworzenia kopii zapasowych.
- Brak pamięci podręcznej wyników: Zapytania względem tabel hybrydowych nie korzystają z utrwalonej pamięci podręcznej wyników zapytań Snowflake.
- Koszt: hybrydowe przechowywanie tabel oraz żądania są rozliczane oddzielnie od standardowego przechowywania tabel i mocy obliczeniowej. Przed migracją dużej tabeli zapoznaj się z dokumentacją kosztów Snowflake.
Dodatkowe źródła
- Dowiedz się więcej o synchronizowaniu hurtowni danych w Klaviyo
- Łączenie Klaviyo i Snowflake
- Snowflake: tabele hybrydowe
- Snowflake: Twórz tabele hybrydowe
- Snowflake: Ograniczenia i nieobsługiwane funkcje dla tabel hybrydowych
- Snowflake: Oceń koszt tabel hybrydowych
- Snowflake: Konwertowanie standardowych tabel Snowflake na tabele hybrydowe