1. Tworzenie potoku odwrotnego ETL z Snowflake do Spanner przy użyciu Google Cloud Storage i BigQuery
Wprowadzenie
W tym module z kodem utworzysz potok Reverse ETL z Snowflake do Spannera. Tradycyjnie potoki ETL (Extract, Transform, Load) przenoszą dane z działających baz danych do hurtowni danych, takiej jak Snowflake, na potrzeby analizy. Potok Reverse ETL działa odwrotnie: przenosi wyselekcjonowane, przetworzone dane z hurtowni danych z powrotem do systemów operacyjnych, w których mogą one zasilać aplikacje, obsługiwać funkcje dostępne dla użytkowników lub być wykorzystywane do podejmowania decyzji w czasie rzeczywistym.
Celem jest przeniesienie zagregowanego zbioru danych z tabeli Iceberg w Snowflake do Spannera, czyli globalnie rozpowszechnionej relacyjnej bazy danych idealnej do aplikacji o wysokiej dostępności.
W tym celu jako kroki pośrednie wykorzystywane są Google Cloud Storage (GCS) i BigQuery. Oto opis przepływu danych i uzasadnienie tej architektury:
- Snowflake do Google Cloud Storage (GCS) w formacie Iceberg:
- Pierwszym krokiem jest wyeksportowanie danych z Snowflake w otwartym, dobrze zdefiniowanym formacie. Tabela jest eksportowana w formacie Apache Iceberg. W ramach tego procesu dane bazowe są zapisywane jako zestaw plików Parquet, a metadane tabeli (schemat, partycje, lokalizacje plików) jako pliki JSON i Avro. Przechowywanie całej struktury tabeli w GCS sprawia, że dane są przenośne i dostępne dla każdego systemu, który rozumie format Iceberg.
- Konwertowanie tabel Iceberg w GCS na zewnętrzne tabele BigLake w BigQuery:
- Zamiast wczytywać dane bezpośrednio z GCS do Spannera, BigQuery jest używany jako wydajny pośrednik. W BigQuery utworzysz zewnętrzną tabelę BigLake, która będzie wskazywać bezpośrednio plik metadanych Iceberg w GCS. Takie podejście ma kilka zalet:
- Brak duplikowania danych: BigQuery odczytuje strukturę tabeli z metadanych i wysyła zapytania do plików danych Parquet w miejscu bez ich pozyskiwania, co pozwala zaoszczędzić dużo czasu i kosztów przechowywania.
- Zapytania sfederowane: umożliwiają uruchamianie złożonych zapytań SQL dotyczących danych GCS tak, jakby były one natywną tabelą BigQuery.
- BigQuery do Spanner:
- Ostatnim krokiem jest przeniesienie danych z BigQuery do Spannera. Zrobisz to za pomocą zaawansowanej funkcji BigQuery o nazwie
EXPORT DATA, która jest krokiem „Reverse ETL”. - Gotowość operacyjna: Spanner został zaprojektowany z myślą o zadaniach transakcyjnych, zapewniając aplikacjom silną spójność i wysoką dostępność. Przeniesienie danych do Spannera sprawia, że stają się one dostępne dla aplikacji, interfejsów API i innych systemów operacyjnych, które wymagają wyszukiwania punktowego z małymi opóźnieniami.
- Skalowalność: ten wzorzec umożliwia wykorzystanie mocy analitycznej BigQuery do przetwarzania dużych zbiorów danych, a następnie wydajne udostępnianie wyników za pomocą globalnie skalowalnej infrastruktury Spanner.
Usługi i terminologia
- Snowflake – platforma danych w chmurze, która udostępnia usługę hurtowni danych.
- Spanner – w pełni zarządzana, globalnie rozproszona relacyjna baza danych.
- Google Cloud Storage – usługa Google Cloud do przechowywania danych binarnych.
- BigQuery – w pełni zarządzana bezserwerowa hurtownia danych do analizy.
- Iceberg – otwarty format tabeli zdefiniowany przez Apache, który zapewnia abstrakcję nad popularnymi formatami plików danych typu open source.
- Parquet – otwarty format binarnych plików danych w kolumnach opracowany przez Apache.
Czego się nauczysz
- Wczytywanie danych do Snowflake
- Jak utworzyć zasobnik GCS
- Eksportowanie tabeli Snowflake do GCS w formacie Iceberg
- Konfigurowanie instancji usługi Spanner
- Wczytywanie zewnętrznych tabel BigLake w BigQuery do Spannera
2. Konfiguracja, wymagania i ograniczenia
Wymagania wstępne
- konto Snowflake,
- Aby eksportować dane z BigQuery do Spanner, musisz mieć konto Google Cloud z rezerwacją na poziomie Enterprise lub wyższym w BigQuery.
- Dostęp do konsoli Google Cloud w przeglądarce
- terminal do uruchamiania poleceń Google Cloud CLI;
- Jeśli w Twojej organizacji Google Cloud jest włączona zasada
iam.allowedPolicyMemberDomains, administrator może przyznać wyjątek, aby zezwolić na konta usługi z domen zewnętrznych. W odpowiednich przypadkach omówimy to w dalszej części procesu.
Ograniczenia
W tym potoku mogą wystąpić pewne ograniczenia i niezgodności typów danych, o których warto pamiętać.
Snowflake to Iceberg
Typy danych w kolumnach różnią się w przypadku Snowflake i Iceberg. Informacje o tłumaczeniu między nimi znajdziesz w dokumentacji Snowflake.
Zapisywanie danych z Iceberga w BigQuery
Podczas wykonywania zapytań do tabel Iceberg za pomocą BigQuery obowiązują pewne ograniczenia. Pełną listę znajdziesz w dokumentacji BigQuery. Pamiętaj, że typy takie jak BIGNUMERIC, INTERVAL, JSON, RANGE i GEOGRAPHY nie są obecnie obsługiwane.
BigQuery do Spanner
Polecenie EXPORT DATA z BigQuery do Spanner nie obsługuje wszystkich typów danych BigQuery. Eksportowanie tabeli z tymi typami danych spowoduje błąd:
STRUCTGEOGRAPHYDATETIMERANGETIME
Jeśli projekt BigQuery używa dialektu GoogleSQL, eksport do Spannera nie obsługuje też tych typów liczbowych:
BIGNUMERIC
Pełną i aktualną listę ograniczeń znajdziesz w oficjalnej dokumentacji: Ograniczenia eksportowania do Spannera.
Płatek śniegu
W tym samouczku możesz użyć istniejącego konta Snowflake lub utworzyć konto w bezpłatnej wersji próbnej.
Uprawnienia Google Cloud Platform IAM
Aby wykonać wszystkie czynności w tym samouczku, musisz mieć na koncie Google te uprawnienia:
Konta usługi | ||
| Umożliwia tworzenie kont usługi. | |
Spanner | ||
| Umożliwia utworzenie nowej instancji usługi Spanner. | |
| Umożliwia uruchamianie instrukcji DDL w celu tworzenia | |
| Umożliwia uruchamianie instrukcji DDL w celu tworzenia tabel w bazie danych. | |
Google Cloud Storage | ||
| Umożliwia utworzenie nowego zasobnika GCS do przechowywania wyeksportowanych plików Parquet. | |
| Umożliwia zapisywanie wyeksportowanych plików Parquet w zasobniku GCS. | |
| Umożliwia BigQuery odczytywanie plików Parquet z zasobnika GCS. | |
| Umożliwia BigQuery wyświetlanie listy plików Parquet w zasobniku GCS. | |
Dataflow | ||
| Umożliwia przejmowanie elementów roboczych z Dataflow. | |
| Umożliwia procesowi roboczemu Dataflow wysyłanie wiadomości z powrotem do usługi Dataflow. | |
| Umożliwia procesom roboczym Dataflow zapisywanie wpisów logów w Google Cloud Logging. | |
Dla wygody możesz użyć zdefiniowanych ról, które zawierają te uprawnienia.
|
|
|
|
|
|
|
|
Konfigurowanie właściwości wielokrotnego użytku
W tym module będziesz wielokrotnie potrzebować kilku wartości. Aby to ułatwić, ustawimy te wartości jako zmienne powłoki, które będą używane później.
- GCP_REGION – konkretny region, w którym będą się znajdować zasoby GCP. Listę regionów znajdziesz tutaj.
- GCP_PROJECT – identyfikator projektu GCP do użycia.
- GCP_BUCKET_NAME – nazwa zasobnika GCS, który ma zostać utworzony i w którym będą przechowywane pliki danych.
export GCP_REGION = <GCP REGION HERE>
export GCP_PROJECT= <GCP PROJECT HERE>
export GCS_BUCKET_NAME = <GCS BUCKET NAME HERE>
export SPANNER_INSTANCE = <SPANNER INSTANCE ID HERE>
export SPANNER_DB = <SPANNER DATABASE ID HERE>
Projekt Google Cloud
Projekt to podstawowa jednostka organizacji w Google Cloud. Jeśli administrator udostępnił adres e-mail do użycia, ten krok można pominąć.
Projekt można utworzyć za pomocą interfejsu wiersza poleceń w ten sposób:
gcloud projects create $GCP_PROJECT
gcloud config set project $GCP_PROJECT
Więcej informacji o tworzeniu projektów i zarządzaniu nimi znajdziesz tutaj.
Konfigurowanie usługi Spanner
Aby zacząć korzystać ze Spannera, musisz udostępnić instancję i bazę danych. Szczegółowe informacje o konfigurowaniu i tworzeniu instancji Spanner znajdziesz tutaj.
Tworzenie instancji
gcloud spanner instances create $SPANNER_INSTANCE \
--config=regional-$GCP_REGION \
--description="Codelabs Snowflake RETL" \
--processing-units=100 \
--edition=ENTERPRISE
Tworzenie bazy danych
gcloud spanner databases create $SPANNER_DB \
--instance=$SPANNER_INSTANCE
3. Utworzysz zasobnik Google Cloud Storage
Google Cloud Storage (GCS) będzie używany do przechowywania plików danych Parquet i metadanych Iceberg wygenerowanych przez Snowflake. W tym celu musisz najpierw utworzyć nowy zasobnik, który będzie miejscem docelowym pliku. W oknie terminala na komputerze lokalnym wykonaj te czynności.
Tworzenie zasobnika
Aby utworzyć zasobnik pamięci w określonym regionie (np. us-central1), użyj tego polecenia.
gcloud storage buckets create gs://$GCS_BUCKET_NAME --location=$GCP_REGION
Sprawdź, czy zasobnik został utworzony
Po pomyślnym wykonaniu tego polecenia sprawdź wynik, wyświetlając listę wszystkich zasobników. Nowy zasobnik powinien pojawić się na liście wyników. Odwołania do zasobników zwykle mają przed nazwą zasobnika prefiks gs://.
gcloud storage ls | grep gs://$GCS_BUCKET_NAME
Testowanie uprawnień do zapisu
Ten krok zapewnia prawidłowe uwierzytelnianie środowiska lokalnego i przyznanie mu niezbędnych uprawnień do zapisywania plików w nowo utworzonym zasobniku.
echo "Hello, GCS" | gcloud storage cp - gs://$GCS_BUCKET_NAME/hello.txt
Sprawdzanie przesłanego pliku
Wyświetl listę obiektów w zasobniku. Powinna się wyświetlić pełna ścieżka do przesłanego pliku.
gcloud storage ls gs://$GCS_BUCKET_NAME
Powinny się wyświetlić te dane wyjściowe:
gs://$GCS_BUCKET_NAME/hello.txt
Aby wyświetlić zawartość obiektu w zasobniku, można użyć gcloud storage cat.
gcloud storage cat gs://$GCS_BUCKET_NAME/hello.txt
Zawartość pliku powinna być widoczna:
Hello, GCS
Usuwanie pliku testowego
Zasobnik Cloud Storage jest już skonfigurowany. Teraz możesz usunąć tymczasowy plik testowy.
gcloud storage rm gs://$GCS_BUCKET_NAME/hello.txt
Dane wyjściowe powinny potwierdzać usunięcie:
Removing gs://$GCS_BUCKET_NAME/hello.txt... / [1 objects] Operation completed over 1 objects.
4. Eksportowanie ze Snowflake do GCS
W tym module wykorzystasz zbiór danych TPC-H, który jest standardowym w branży testem porównawczym systemów wspomagających podejmowanie decyzji. Jego schemat modeluje realistyczne środowisko biznesowe z klientami, zamówieniami, dostawcami i częściami, dzięki czemu idealnie nadaje się do zademonstrowania rzeczywistego scenariusza analityki i przenoszenia danych. Ten zbiór danych jest domyślnie dostępny na wszystkich kontach Snowflake.
Zamiast korzystać z surowych, znormalizowanych tabel TPC-H, utworzysz nową, zagregowaną tabelę. Ta nowa tabela połączy dane z tabel orders, customer i nation, aby utworzyć zdenormalizowany, podsumowany widok łącznej sprzedaży w poszczególnych krajach. Ten krok wstępnej agregacji jest powszechnie stosowany w analityce, ponieważ przygotowuje dane do konkretnego zastosowania – w tym przypadku do wykorzystania przez aplikację operacyjną.
Zezwalanie Snowflake na dostęp do Google Cloud Storage
Aby umożliwić Snowflake zapisywanie danych w zasobniku GCS, musisz utworzyć wolumin zewnętrzny i przyznać niezbędne uprawnienia.
- Wolumin zewnętrzny to obiekt Snowflake, który zapewnia bezpieczne połączenie z określoną lokalizacją w zasobniku GCS. Nie przechowuje on danych, ale zawiera konfigurację potrzebną Snowflake do uzyskania dostępu do pamięci w chmurze.
- Ze względów bezpieczeństwa zasobniki pamięci w chmurze są domyślnie prywatne. Gdy tworzony jest wolumin zewnętrzny, Snowflake generuje dedykowane konto usługi. To konto usługi musi mieć przyznane uprawnienia do odczytu z zasobnika i zapisu w nim.
Utwórz bazę danych
- W menu po lewej stronie w sekcji Horizon Catalog najedź kursorem na Catalog (Katalog), a następnie kliknij Database Explorer (Eksplorator bazy danych).
- Na stronie Bazy danych w prawym górnym rogu kliknij przycisk + Baza danych.
- Nadaj nazwę nowej bazie danych
codelabs_retl_db
Tworzenie arkusza
Aby uruchamiać polecenia SQL w bazie danych, potrzebne będą arkusze.
Aby utworzyć arkusz:
- W menu po lewej stronie w sekcji Praca z danymi najedź kursorem na Projekty, a następnie kliknij Obszary robocze.
- Na pasku bocznym Moje obszary robocze kliknij przycisk + Dodaj nowy i wybierz Plik SQL.
Tworzenie woluminu zewnętrznego
Aby utworzyć wolumin, uruchom to polecenie w arkuszu Snowflake.
CREATE EXTERNAL VOLUME codelabs_retl_ext_vol
STORAGE_LOCATIONS =
(
(
NAME = 'codelabs_retl_ext_vol'
STORAGE_PROVIDER = 'GCS'
STORAGE_BASE_URL = 'gcs://<Your bucket name>/snowflake_extvol'
)
);
Pobieranie konta usługi Snowflake
DESC (describe) nowo utworzony wolumin zewnętrzny, aby uzyskać unikalne konto usługi wygenerowane dla niego przez Snowflake.
DESC EXTERNAL VOLUME codelabs_retl_ext_vol;
- W panelu wyników poszukaj właściwości JSON i znajdź wpis
property_value, który zawiera ciąg znaków JSON zaczynający się od"NAME":"codelabs_retl_ext_vol". - Znajdź właściwość
STORAGE_GCP_SERVICE_ACCOUNTw obiekcie JSON i skopiuj jej wartość (będzie ona wyglądać jak adres e-mail). Jest to identyfikator konta usługi, które potrzebuje dostępu do zasobnika GCS. - Zapisz to konto usługi w zmiennej środowiskowej w instancji powłoki, aby móc je później ponownie wykorzystać.
export GCP_SERVICE_ACCOUNT=<Your service account>
Przyznawanie Snowflake uprawnień GCS
Teraz musisz przyznać kontu usługi Snowflake uprawnienia do zapisu w zasobniku GCS.
gcloud storage buckets add-iam-policy-binding gs://$GCS_BUCKET_NAME \
--member="serviceAccount:$GCP_SERVICE_ACCOUNT" \
--role="roles/storage.objectAdmin"
gcloud storage buckets add-iam-policy-binding gs://$GCS_BUCKET_NAME \
--member="serviceAccount:$GCP_SERVICE_ACCOUNT" \
--role="roles/storage.legacyBucketReader"
Sprawdzanie dostępu w Snowflake
Wróć do arkusza Snowflake i uruchom to polecenie, aby sprawdzić, czy Snowflake może teraz połączyć się z zasobnikiem GCS.
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('codelabs_retl_ext_vol');
Wynikiem powinien być obiekt JSON zawierający "success":true.
Więcej informacji o woluminach zewnętrznych w Snowflake znajdziesz w oficjalnej dokumentacji.
Eksportowanie przykładowych danych zamówienia
Teraz możesz utworzyć tabelę Iceberg w Snowflake. To polecenie nakazuje Snowflake uruchomienie zapytania i zapisanie wyników w GCS w formacie Iceberg. Pliki danych będą w formacie Parquet, a metadane w formatach Avro i JSON. Wszystkie będą przechowywane w lokalizacji zdefiniowanej przez codelabs_retl_ext_vol wolumin zewnętrzny.
Utwórz bazę danych
- W menu po lewej stronie w sekcji Horizon Catalog najedź kursorem na Catalog (Katalog), a następnie kliknij Database Explorer (Eksplorator bazy danych).
- Na stronie Bazy danych w prawym górnym rogu kliknij przycisk + Baza danych.
- Nadaj nazwę nowej bazie danych
codelabs_retl_db
USE DATABASE codelabs_retl_db;
CREATE ICEBERG TABLE REGIONAL_SALES_ICEBERG (
NATION_NAME STRING,
MARKET_SEGMENT STRING,
ORDER_YEAR INTEGER,
ORDER_PRIORITY STRING,
TOTAL_ORDER_COUNT INTEGER,
TOTAL_REVENUE NUMBER(24,2),
UNIQUE_CUSTOMER_COUNT INTEGER
)
EXTERNAL_VOLUME = 'codelabs_retl_ext_vol'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'regional_sales_iceberg'
AS (
SELECT
n.n_name AS nation_name,
c.c_mktsegment AS market_segment,
YEAR(o.o_orderdate) AS order_year,
o.o_orderpriority AS order_priority,
COUNT(o.o_orderkey) AS total_order_count,
ROUND(SUM(o.o_totalprice), 2) AS total_revenue,
COUNT(DISTINCT c.c_custkey) AS unique_customer_count
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.orders AS o
INNER JOIN SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.customer AS c
ON o.o_custkey = c.c_custkey
INNER JOIN SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.nation AS n
ON c.c_nationkey = n.n_nationkey
GROUP BY
n.n_name,
c.c_mktsegment,
YEAR(o.o_orderdate),
o.o_orderpriority
);
Więcej informacji o tworzeniu tabel Iceberg i zarządzaniu nimi za pomocą Snowflake znajdziesz w oficjalnej dokumentacji.
Weryfikowanie danych w GCP
Sprawdź teraz zasobnik GCS. Powinny być widoczne pliki utworzone przez Snowflake. Potwierdza to, że eksport zakończył się powodzeniem. Metadane Iceberg znajdziesz w folderze metadata, a rzeczywiste dane w postaci plików Parquet w folderze data.
gcloud storage ls "gs://$GCS_BUCKET_NAME/snowflake_extvol/**"
Nazwy plików mogą się różnić, ale struktura powinna wyglądać tak:
gs://$GCS_BUCKET_NAME/snowflake_extvol/ gs://$GCS_BUCKET_NAME/snowflake_extvol/regional_sales_iceberg.snvrAWuR/data/snow_cbsKIRmdDmo_wLg128fugxg_0_2_009.parquet ... gs://$GCS_BUCKET_NAME/snowflake_extvol/regional_sales_iceberg.snvrAWuR/metadata/00001-62f831ff-6708-4494-94c5-c891b7ad447f.metadata.json ...
Dane zostały skopiowane z Snowflake do Google Cloud Storage w formacie Iceberg.
Zapiszmy plik metadata.json w zmiennej środowiskowej, ponieważ będzie nam potrzebny później.
export GCS_METADATA_JSON=$(gcloud storage ls "gs://$GCS_BUCKET_NAME/snowflake_extvol/**" | grep .metadata.json)
5. Konfigurowanie tabeli zewnętrznej BigQuery
Tabela Iceberg znajduje się już w Google Cloud Storage. Następnym krokiem jest udostępnienie jej BigQuery. Możesz to zrobić, tworząc tabelę zewnętrzną BigLake.
BigLake to mechanizm przechowywania danych, który umożliwia tworzenie w BigQuery tabel odczytujących dane bezpośrednio ze źródeł zewnętrznych, takich jak Google Cloud Storage. W tym module jest to kluczowa technologia, która umożliwia BigQuery zrozumienie właśnie wyeksportowanej tabeli Iceberg bez konieczności pozyskiwania danych.
Aby to działało, potrzebne są 2 komponenty:
- Połączenie z zasobem w chmurze: jest to bezpieczne połączenie między BigQuery a GCS. Do obsługi uwierzytelniania używa specjalnego konta usługi, dzięki czemu BigQuery ma uprawnienia do odczytywania plików z zasobnika GCS.
- Definicja tabeli zewnętrznej: informuje BigQuery, gdzie w GCS znajduje się plik metadanych tabeli Iceberg i jak należy go interpretować.
Konfigurowanie połączenia z Google Cloud Storage
Najpierw zostanie utworzone połączenie, które umożliwi BigQuery dostęp do GCS. To polecenie tworzy zasób połączenia w BigQuery.
bq mk \
--connection \
--project_id=$GCP_PROJECT \
--location=$GCP_REGION \
--connection_type=CLOUD_RESOURCE \
codelabs-retl-connection
Sukces będzie wyglądał mniej więcej tak:
Connection 12345678.region.codelabs-retl-connection successfully created
Więcej informacji o połączeniach zasobów Cloud w BigQuery znajdziesz w dokumentacji Google Cloud.
Autoryzowanie połączenia BigQuery do odczytywania danych
Nowe połączenie BigQuery ma własne konto usługi, które musi mieć uprawnienia do odczytu danych z zasobnika Google Cloud Storage.
1. Pobieranie konta usługi połączenia
Najpierw uzyskaj identyfikator konta usługi z utworzonego właśnie połączenia:
bq show \
--location $GCP_REGION \
--connection codelabs-retl-connection
Wyniki będą zawierać tabelę pasujących połączeń.
Ustawmy serviceAccountId jako zmienną środowiskową, która będzie używana później.
export GCP_BQ_SERVICE_ACCOUNT=<Your service account email>
2. Przyznaj uprawnienia
Uruchom to polecenie, aby autoryzować konto usługi do wyświetlania danych w zasobniku GCS.
gcloud storage buckets add-iam-policy-binding \
gs://$GCS_BUCKET_NAME \
--member serviceAccount:$GCP_BQ_SERVICE_ACCOUNT \
--role roles/storage.objectViewer
Tworzenie tabeli zewnętrznej
Teraz utwórz zewnętrzną tabelę BigLake w BigQuery. To polecenie nie przenosi żadnych danych. Po prostu tworzy wskaźnik do istniejących danych w GCS. Będziesz potrzebować ścieżki do jednego z plików .metadata.json utworzonych przez Snowflake.
bq mk --dataset --location=$GCP_REGION codelabs_retl
bq mk \
--table \
--location=$GCP_REGION \
--external_table_definition=ICEBERG=$GCS_METADATA_JSON@projects/$GCP_PROJECT/locations/$GCP_REGION/connections/codelabs-retl-connection \
codelabs_retl.regional_sales
Sprawdzanie danych w BigQuery
Teraz możesz wykonywać na tej tabeli zapytania w standardowej wersji SQL, tak jak w przypadku każdej innej tabeli BigQuery. BigQuery będzie używać połączenia do odczytywania plików Parquet z GCS na bieżąco.
bq query \
--location=$GCP_REGION \
--nouse_legacy_sql "SELECT * FROM \`$GCP_PROJECT.codelabs_retl.regional_sales\` LIMIT 10;"
6. Importowanie danych z BigQuery do Spannera: ostatni krok
Osiągnięto ostatnią i najważniejszą część potoku: przeniesienie danych z tabeli BigLake do Spannera. Jest to krok „Reverse ETL”, w którym dane po przetworzeniu i wyselekcjonowaniu w hurtowni danych są ładowane do systemu operacyjnego w celu wykorzystania przez aplikacje.
Spanner to w pełni zarządzana, globalnie rozpowszechniona relacyjna baza danych. Zapewnia spójność transakcyjną tradycyjnej relacyjnej bazy danych, ale z możliwością skalowania w poziomie bazy danych NoSQL. Dzięki temu jest to idealny wybór do tworzenia skalowalnych aplikacji o wysokiej dostępności.
Proces będzie przebiegał w ten sposób:
- Utwórz w bazie danych Spanner schemat tabeli, który będzie zgodny ze strukturą danych.
- Uruchom zapytanie BigQuery
EXPORT DATA, aby wczytać dane z tabeli BigLake bezpośrednio do tabeli Spanner.
Tworzenie tabeli Spanner
Przed przeniesieniem danych z BigQuery w Spannerze musi zostać utworzona tabela docelowa ze zgodnym schematem.
gcloud spanner databases ddl update $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl="$(cat <<EOF
CREATE TABLE regional_sales (
nation_name STRING(MAX),
market_segment STRING(MAX),
order_year INT64,
order_priority STRING(MAX),
total_order_count INT64,
total_revenue NUMERIC,
unique_customer_count INT64
) PRIMARY KEY (nation_name, market_segment, order_year, order_priority);
EOF
)"
Eksportowanie danych z BigQuery
To ostatni krok. Gdy dane źródłowe są gotowe w tabeli BigLake w BigQuery, a tabela docelowa jest utworzona w Spannerze, rzeczywiste przenoszenie danych jest zaskakująco proste. Zostanie użyte jedno zapytanie BigQuery SQL: EXPORT DATA.
To zapytanie zostało zaprojektowane specjalnie na potrzeby takich scenariuszy. Umożliwia wydajne eksportowanie danych z tabeli BigQuery (w tym tabel zewnętrznych, takich jak tabela BigLake) do miejsca docelowego. W tym przypadku miejscem docelowym jest tabela Spannera.
bq query --location=$GCP_REGION --use_legacy_sql=false <<EOF
EXPORT DATA OPTIONS (
uri="https://spanner.googleapis.com/projects/${GCP_PROJECT}/instances/${SPANNER_INSTANCE}/databases/${SPANNER_DB}",
format='CLOUD_SPANNER',
spanner_options="""{
"table": "regional_sales",
"priority": "HIGH"
}"""
) AS
SELECT * FROM \`${PROJECT_ID}.codelabs_retl.regional_sales\`
EOF
Gdy zapytanie się zakończy, w panelu Wyniki powinien pojawić się komunikat „Aktualizacja zakończona”.
7. Weryfikowanie danych w usłudze Spanner
Gratulacje! Udało Ci się utworzyć i uruchomić pełny potok Reverse ETL. Ostatni krok to sprawdzenie, czy dane zostały przesłane do usługi Spanner zgodnie z oczekiwaniami.
gcloud spanner databases execute-sql \
--instance=$SPANNER_INSTANCE \
$SPANNER_DB \
--sql='SELECT * FROM regional_sales LIMIT 10'
Zaimportowane przykładowe dane pojawią się zgodnie z żądaniem:
nation_name market_segment order_year order_priority total_order_count total_revenue unique_customer_count ALGERIA AUTOMOBILE 1992 1-URGENT 375 59232423.66 298 ALGERIA AUTOMOBILE 1992 2-HIGH 328 47371891.08 269 ALGERIA AUTOMOBILE 1992 3-MEDIUM 346 52823195.87 262 ALGERIA AUTOMOBILE 1992 4-NOT SPECIFIED 365 52935998.34 288 ALGERIA AUTOMOBILE 1992 5-LOW 380 54920263.68 293 ALGERIA AUTOMOBILE 1993 1-URGENT 394 63145618.78 312 ALGERIA AUTOMOBILE 1993 2-HIGH 340 50737488.4 277 ALGERIA AUTOMOBILE 1993 3-MEDIUM 383 55871057.46 298 ALGERIA AUTOMOBILE 1993 4-NOT SPECIFIED 365 56424662.05 291 ALGERIA AUTOMOBILE 1993 5-LOW 363 54673249.06 283
Udało się połączyć światy danych analitycznych i operacyjnych.
8. Porządkowanie roszczeń
Czyszczenie Spannera
Usuwanie bazy danych i instancji usługi Spanner
gcloud spanner instances delete $SPANNER_INSTANCE
Czyszczenie GCS
Usuwanie zasobnika GCS utworzonego na potrzeby hostowania danych
gcloud storage rm --recursive gs://$GCS_BUCKET_NAME
Czyszczenie BigQuery
bq rm -r codelabs_retl
bq rm --connection --location=$GCP_REGION codelabs-retl-connection
Czyszczenie Snowflake
Usuwanie bazy danych
- W menu po lewej stronie w sekcji Horizon Catalog najedź kursorem na Catalog (Katalog), a następnie kliknij Database Explorer (Eksplorator bazy danych).
- Kliknij … po prawej stronie bazy danych
CODELABS_RETL_DB, aby rozwinąć opcje, i wybierz Usuń. - W wyświetlonym oknie potwierdzenia kliknij Drop Database (Usuń bazę danych).
Usuwanie skoroszytów
- W menu po lewej stronie w sekcji Praca z danymi najedź kursorem na Projekty, a następnie kliknij Obszary robocze.
- Na pasku bocznym Mój obszar roboczy najedź kursorem na różne pliki obszaru roboczego, których używasz w tym module, aby wyświetlić ... dodatkowe opcje, a następnie kliknij je.
- Kliknij Usuń, a następnie jeszcze raz Usuń w oknie potwierdzenia.
- Zrób to w przypadku wszystkich plików obszaru roboczego SQL utworzonych na potrzeby tego modułu.
Usuwanie woluminów zewnętrznych
- W menu po lewej stronie w sekcji Katalog Horizon najedź kursorem na Katalog, a następnie kliknij Dane zewnętrzne.
- Kliknij
po prawej stronie CODELABS_RETL_EXT_VOLi wybierz Odłącz wolumin zewnętrzny, a następnie ponownie kliknij Odłącz wolumin zewnętrzny w oknie potwierdzenia.
9. Gratulacje
Gratulujemy ukończenia ćwiczenia.
Omówione zagadnienia
- Wczytywanie danych do Snowflake
- Jak utworzyć zasobnik GCS
- Eksportowanie tabeli Snowflake do GCS w formacie CSV
- Konfigurowanie instancji usługi Spanner
- Jak wczytywać tabele CSV do Spannera za pomocą Dataflow