Wprowadzenie do Spanner Data Boost i BigQuery

1. Wprowadzenie

Z tego ćwiczenia w Codelabs dowiesz się, jak używać funkcji Spanner Data Boost do wysyłania zapytań dotyczących danych Spannera z BigQuery przy użyciu zapytań sfederowanych bez ETL i bez wpływu na bazę danych Spanner.

f1de68f762a86cc7.png

Spanner Data Boost to w pełni zarządzana, bezserwerowa usługa, która zapewnia niezależne zasoby obliczeniowe dla obsługiwanych zbiorów zadań Spannera. Funkcja Data Boost umożliwia wykonywanie zapytań analitycznych i eksportów danych z niemal zerowym wpływem na istniejące zadania w udostępnionej instancji Spannera z użyciem bezserwerowego modelu wykorzystania na żądanie.

W połączeniu z zewnętrznymi połączeniami BigQuery funkcja Data Boost umożliwia łatwe wysyłanie zapytań dotyczących danych z usługi Spanner do platformy analizy danych bez skomplikowanego przenoszenia danych ETL.

Wymagania wstępne

  • Podstawowa znajomość Google Cloud i konsoli
  • podstawowe umiejętności w zakresie interfejsu wiersza poleceń i Google Shell,

Czego się nauczysz

  • Jak wdrożyć instancję usługi Spanner
  • Jak wczytać dane w celu utworzenia bazy danych Spannera
  • Jak uzyskać dostęp do danych Spannera z BigQuery bez funkcji Data Boost
  • Jak uzyskać dostęp do danych Spannera z BigQuery przy użyciu funkcji Data Boost

Czego potrzebujesz

  • konto Google Cloud i projekt Google Cloud;
  • przeglądarki, np. Chrome;

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zaktualizować.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po jego ustawieniu nie można go zmienić). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń w Codelabs musisz podać swój identyfikator projektu (zwykle identyfikowany jako PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Po wykonaniu tej czynności nie można jej już zmienić. Pozostanie ona przez cały czas trwania projektu.
  • Jest jeszcze trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nic nie kosztuje. Aby wyłączyć zasoby w celu uniknięcia naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Uruchamianie Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w chmurze.

W konsoli Google Cloud kliknij ikonę Cloud Shell na górnym pasku narzędzi:

55efc1aaa7a4d3ad.png

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:

7ffe5cbb04455448.png

Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Wszystkie zadania w ramach tego ćwiczenia z programowania można wykonywać w przeglądarce. Nie musisz niczego instalować.

3. Tworzenie instancji i bazy danych Spanner

Włączanie interfejsu Spanner API

W Cloud Shell sprawdź, czy identyfikator projektu jest skonfigurowany:

gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID=$(gcloud config get-value project)

Ustaw us-central1 jako region domyślny. Możesz go zmienić na inny region obsługiwany przez konfiguracje regionalne usługi Spanner.

gcloud config set compute/region us-central1

Włącz interfejs Spanner API:

gcloud services enable spanner.googleapis.com

Tworzenie instancji usługi Spanner

W tym kroku skonfigurowaliśmy instancję Spannera na potrzeby ćwiczeń w Codelabs. W tym celu otwórz Cloud Shell i uruchom to polecenie:

export SPANNER_INSTANCE_ID=codelab-demo
export SPANNER_REGION=regional-us-central1
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1

Dane wyjściowe polecenia:

$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1
Creating instance...done.  

Tworzenie bazy danych

Gdy instancja zacznie działać, możesz utworzyć bazę danych. Spanner umożliwia korzystanie z wielu baz danych w jednej instancji.

Baza danych to miejsce, w którym definiujesz schemat. Możesz też kontrolować, kto ma dostęp do bazy danych, skonfigurować szyfrowanie niestandardowe, skonfigurować optymalizatora i ustawić okres przechowywania.

Aby utworzyć bazę danych, ponownie użyj narzędzia wiersza poleceń gcloud:

export SPANNER_DATABASE=codelab-db
gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID

Dane wyjściowe polecenia:

$ gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID
Creating database...done.

4. Wczytaj dane

Zanim będzie można użyć funkcji Data Boost, musisz mieć w bazie danych trochę danych. W tym celu utworzysz zasobnik Cloud Storage, prześlesz do niego import avro i uruchomisz zadanie importu Dataflow, które wczyta dane Avro do usługi Spanner.

Włącz interfejsy API

Aby to zrobić, otwórz prompt Cloud Shell, jeśli poprzedni został zamknięty.

Pamiętaj, aby włączyć interfejsy Compute API, Cloud Storage i Dataflow API.

gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com

Oczekiwane dane wyjściowe konsoli:

$ gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com
Operation "operations/acat.*snip*" finished successfully.

Pliki importu etapu w Cloud Storage

Teraz utwórz zasobnik do przechowywania plików avro:

export GCS_BUCKET=spanner-codelab-import_$(date '+%Y-%m-%d_%H_%M_%S')
gcloud storage buckets create gs://$GCS_BUCKET

Oczekiwane dane wyjściowe konsoli:

$ gcloud storage buckets create gs://$GCS_BUCKET
Creating gs://spanner-codelab-import/...

Następnie pobierz plik tar z GitHuba i rozpakuj go.

wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
tar -xzvf spanner-chat-db.tar.gz 

Oczekiwane dane wyjściowe konsoli:

$ wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
*snip*
*snip*(123 MB/s) - spanner-chat-db.tar.gz' saved [46941709/46941709]
$
$ tar -xzvf spanner-chat-db.tar.gz 
spanner-chat-db/
spanner-chat-db/users.avro-00000-of-00002
spanner-chat-db/user_notifications-manifest.json
spanner-chat-db/interests-manifest.json
spanner-chat-db/users-manifest.json
spanner-chat-db/users.avro-00001-of-00002
spanner-chat-db/topics-manifest.json
spanner-chat-db/topics.avro-00000-of-00002
spanner-chat-db/topics.avro-00001-of-00002
spanner-chat-db/user_interests-manifest.json
spanner-chat-db/spanner-export.json
spanner-chat-db/interests.avro-00000-of-00001
spanner-chat-db/user_notifications.avro-00000-of-00001
spanner-chat-db/user_interests.avro-00000-of-00001

Teraz prześlij pliki do utworzonego zasobnika.

gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive

Oczekiwane dane wyjściowe konsoli:

$ gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive
Copying file://spanner-chat-db/users.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00000-of-00002
Copying file://spanner-chat-db/user_notifications-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_notifications-manifest.json
Copying file://spanner-chat-db/interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/interests-manifest.json           
Copying file://spanner-chat-db/users-manifest.json to gs://spanner-codelab-import/spanner-chat-db/users-manifest.json
Copying file://spanner-chat-db/users.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00001-of-00002
Copying file://spanner-chat-db/topics-manifest.json to gs://spanner-codelab-import/spanner-chat-db/topics-manifest.json
Copying file://spanner-chat-db/topics.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00000-of-00002
Copying file://spanner-chat-db/topics.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00001-of-00002
Copying file://spanner-chat-db/user_interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_interests-manifest.json
Copying file://spanner-chat-db/spanner-export.json to gs://spanner-codelab-import/spanner-chat-db/spanner-export.json
Copying file://spanner-chat-db/interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/interests.avro-00000-of-00001
Copying file://spanner-chat-db/user_notifications.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_notifications.avro-00000-of-00001
Copying file://spanner-chat-db/user_interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_interests.avro-00000-of-00001
  Completed files 13/13 | 54.6MiB/54.6MiB                                                                                               

Average throughput: 46.4MiB/s

Importuj dane

Korzystając z plików w Cloud Storage, możesz uruchomić zadanie importu Dataflow, aby wczytać dane do Spannera.

gcloud dataflow jobs run import_chatdb \
    --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
    --region us-central1 \
    --staging-location gs://$GCS_BUCKET/tmp \
    --parameters \
instanceId=$SPANNER_INSTANCE_ID,\
databaseId=$SPANNER_DATABASE,\
inputDir=gs://$GCS_BUCKET/spanner-chat-db

Oczekiwane dane wyjściowe konsoli:

$ gcloud dataflow jobs run import_chatdb \
>     --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
>     --region us-central1 \
>     --staging-location gs://$GCS_BUCKET/tmp \
>     --parameters \
> instanceId=$SPANNER_INSTANCE_ID,\
> databaseId=$SPANNER_DATABASE,\
> inputDir=gs://$GCS_BUCKET/spanner-chat-db
createTime: '*snip*'
currentStateTime: '*snip*'
id: *snip*
location: us-central1
name: import_chatdb
projectId: *snip*
startTime: '*snip*'
type: JOB_TYPE_BATCH

Stan zadania importu możesz sprawdzić za pomocą tego polecenia.

gcloud dataflow jobs list --filter="name=import_chatdb" --region us-central1

Oczekiwane dane wyjściowe konsoli:

$ gcloud dataflow jobs list --filter="name=import_chatdb"
`--region` not set; getting jobs from all available regions. Some jobs may be missing in the event of an outage. https://cloud.google.com/dataflow/docs/concepts/regional-endpoints
JOB_ID                                   NAME           TYPE   CREATION_TIME        STATE    REGION
*snip*                                  import_chatdb  Batch  2024-04-*snip*  Done  us-central1

Weryfikowanie danych w usłudze Spanner

Otwórz Spanner Studio i sprawdź, czy dane są w nim dostępne. Najpierw rozwiń tabelę tematów, aby wyświetlić kolumny.

cd1cf38efd2b974a.png

Teraz uruchom to zapytanie, aby się upewnić, że dane są dostępne:

SELECT COUNT(*) FROM topics;

Oczekiwane dane wyjściowe:

89e5d92fbe71c022.png

5. Odczyt danych z BigQuery

Skoro masz już dane w usłudze Spanner, nadszedł czas, aby uzyskać do nich dostęp z poziomu BigQuery. W tym celu musisz skonfigurować połączenie zewnętrzne ze Spannera w BigQuery.

Zakładając, że masz odpowiednie uprawnienia, utwórz połączenie zewnętrzne z usługą Spanner, wykonując czynności opisane poniżej.

Kliknij przycisk „Dodaj”, u góry konsoli BigQuery i wybierz „Połączenia z niewiecznymi źródłami danych”. .

580a0d237f11a9c5.png

75968de398fabf7e.png

Możesz teraz uruchomić zapytanie odczytujące dane z usługi Spanner. Uruchom to zapytanie w konsoli BigQuery, pamiętając o podaniu wartości projektu ${PROJECT_ID}:

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Przykładowe dane wyjściowe:

e47265487c3e39bd.png

W sekcji „Informacje o zadaniu” możesz zobaczyć informacje o zadaniu, takie jak czas trwania i ilość przetworzonych danych. .

9ae40b0aa8c4891.png

Następnie dodasz połączenie Data Boost do Spannera i porównasz wyniki.

6. Odczyt danych za pomocą funkcji Data Boost

Aby korzystać z funkcji Spanner Data Boost, musisz utworzyć nowe połączenie zewnętrzne między BigQuery a Spanner. Kliknij „Dodaj”. w konsoli BigQuery i wybierz „Connections from external data sources” ponownie.

Wpisz szczegóły tym samym identyfikatorem URI połączenia z usługą Spanner. Zmiana identyfikatora połączenia i zaznacz opcję „Użyj funkcji wzmocnienia transmisji danych” .

8e2205255b56a279.png

Po utworzeniu połączenia Data Boost możesz uruchomić to samo zapytanie, ale z nową nazwą połączenia. Także w tym przypadku zastąp w zapytaniu identyfikator projektu.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Powinien pojawić się taki sam wynik jak poprzednio. Czy zmienił się czas?

7. Informacje o funkcji Data Boost

Funkcja Spanner Data Boost umożliwia korzystanie z zasobów niezwiązanych z zasobami instancji Spanner. Zmniejsza to przede wszystkim wpływ zbiorów zadań analitycznych na zbiory zadań operacyjne.

Możesz to zobaczyć, uruchamiając zapytanie w taki sposób, aby nie używać funkcji Data Boost kilka razy na przestrzeni 2 lub 3 minut. Pamiętaj, aby zastąpić ${PROJECT_ID}.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Następnie poczekaj jeszcze kilka minut i uruchom zapytanie, aby użyć funkcji Data Boost jeszcze kilka razy. Pamiętaj, aby zastąpić ${PROJECT_ID}.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Teraz wróć do narzędzia Spanner Studio w konsoli Cloud i otwórz statystyki systemowe.

c1dc67fcc7a2a71.png

Tutaj znajdziesz wskaźniki dotyczące procesora. Zapytania uruchomione bez funkcji Data Boost korzystają z procesora dla zadania „executesql_select_withpartitiontoken” operacji. Mimo że zapytanie jest takie samo, wykonanie Data Boost nie jest odnotowywane w przypadku wykorzystania procesora przez instancję.

a86a7508b6738904.png

W wielu przypadkach użycie funkcji Data Boost spowoduje wzrost wydajności zapytania analitycznego. Zbiór danych w tym samouczku jest mały i żadne inne zbiory zadań nie konkurują o zasoby. Z tego powodu ten samouczek nie pokazuje ulepszeń wydajności.

Możesz swobodnie poeksperymentować z zapytaniami i zadaniami oraz zobaczyć, jak działa Data Boost. Gdy skończysz, przejdź do następnej sekcji, aby wyczyścić środowisko.

8. Wyczyść środowisko

Jeśli Twój projekt został stworzony specjalnie na potrzeby tego ćwiczenia z programowania, możesz go po prostu usunąć, aby je wyczyścić. Jeśli chcesz zachować projekt i usunąć poszczególne komponenty, wykonaj czynności opisane poniżej.

Usuwanie połączeń z BigQuery

Aby usunąć oba połączenia, kliknij 3 kropki obok nazwy połączenia., Kliknij „Usuń”, a potem postępuj zgodnie z instrukcjami, aby usunąć połączenie.

c9348832bcf202a9.png

Usuwanie zasobnika Cloud Storage

gcloud storage rm --recursive gs://$GCS_BUCKET

Usuwanie instancji Spannera

Aby wyczyścić dane, otwórz sekcję Cloud Spanner w konsoli Cloud i usuń plik „codelab-demo”. w instancji utworzonej w ramach ćwiczenia.

ab7c83ebdab74c04.png

9. Gratulacje

Gratulujemy ukończenia ćwiczeń z programowania.

Omówione zagadnienia

  • Jak wdrożyć instancję usługi Spanner
  • Jak wczytywać dane do usługi Spanner za pomocą Dataflow
  • Jak uzyskać dostęp do danych Spannera z BigQuery
  • Jak korzystać z funkcji Spanner Data Boost, aby uniknąć wpływu na instancję Spannera w przypadku zapytań analitycznych z BigQuery

10. Ankieta

Dane wyjściowe:

Jak wykorzystasz ten samouczek?

tylko do przeczytania. Przeczytaj go i wykonaj ćwiczenia
.