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.

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;

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

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

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.

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;

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.

text
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.

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;
  • 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.

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;

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.

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

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:

text
SHOW INDEXES IN TABLE KLAVIYO_PROFILE_HYBRID;

Krok 4: zweryfikuj kopię

Liczby wierszy muszą się zgadzać, a zapytanie różnicowe musi zwracać 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
);

Potwierdź, że nowa tabela naprawdę jest hybrydowa, a następnie wyrywkowo sprawdź odczyt punktu na podstawie tego samego zapytania w standardowej tabeli:

text
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.

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;

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.

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;

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ą:

text
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.

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;

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.

text
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

Czy ten artykuł był pomocny?
Ten formularz służy tylko do przesyłania opinii na temat artykułów. Dowiedz się, jak skontaktować się z zespołem ds. pomocy.

Dowiedz się od Klaviyo więcej

Społeczność
Nawiązuj kontakty z osobami na podobnych stanowiskach, partnerami oraz ekspertami i ekspertkami Klaviyo – inspirujcie się nawzajem, wymieniajcie spostrzeżeniami i pomagajcie szukać odpowiedzi na nurtujące Was pytania.
Partnerzy
Zatrudnij certyfikowanego eksperta Klaviyo, który pomoże Ci w konkretnym zadaniu lub w ciągłym zarządzaniu marketingiem.
Pomoc

Uzyskaj wsparcie za pośrednictwem konta.

E-mail do zespołu ds. pomocy (konta w bezpłatnym okresie próbnym oraz konta płatne) Całodobowa dostępność

Czat/wirtualna pomoc
Dostępność różni się w–zależności od lokalizacji i typu planu.