Wprowadzenie do Spanner Data Boost i BigQuery

1. Wprowadzenie

W tym ćwiczeniu dowiesz się, jak używać Spanner Data Boost do wykonywania zapytań o dane Spannera z BigQuery za pomocą sfederowanych zapytań bez ETL i bez wpływu na bazę danych Spanner.

f1de68f762a86cc7.png

Spanner Data Boost to w pełni zarządzana usługa bezserwerowa, która udostępnia niezależne zasoby obliczeniowe dla obsługiwanych zadań Spanner. Data Boost umożliwia wykonywanie zapytań analitycznych i eksportowanie danych przy niemal zerowym wpływie na istniejące zbiory zadań w udostępnionej instancji Spannera przy użyciu bezserwerowego modelu wykorzystania na żądanie.

W połączeniu z zewnętrznymi połączeniami BigQuery Data Boost umożliwia łatwe wykonywanie zapytań dotyczących danych ze Spannera na platformie do analizy danych bez skomplikowanego przenoszenia danych ETL.

Wymagania wstępne

  • Podstawowa znajomość konsoli Google Cloud
  • Podstawowe umiejętności w zakresie interfejsu wiersza poleceń i powłoki Google

Czego się nauczysz

  • Jak wdrożyć instancję usługi Spanner
  • Jak wczytać dane, aby utworzyć bazę danych Spanner
  • Jak uzyskać dostęp do danych ze Spannera z BigQuery bez Data Boost
  • Jak uzyskać dostęp do danych Spanner z BigQuery za pomocą Data Boost

Czego potrzebujesz

  • Konto Google Cloud i projekt Google Cloud
  • przeglądarka, np. Chrome;

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu.
  • Warto wiedzieć, że istnieje trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego ćwiczenia nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Uruchamianie Cloud Shell

Z Google Cloud można korzystać zdalnie na laptopie, ale w tym ćwiczeniu użyjesz Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Wszystkie zadania w tym ćwiczeniu w Codelabs możesz wykonać 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)

Skonfiguruj domyślny region na us-central1. Możesz zmienić ten region na inny obsługiwany przez konfiguracje regionalne 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 skonfigurujemy instancję Spannera na potrzeby ćwiczeń z programowania. Aby to zrobić, 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

Wynik 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 będzie działać, możesz utworzyć bazę danych. Spanner umożliwia korzystanie z wielu baz danych w jednej instancji.

W bazie danych definiujesz schemat. Możesz też kontrolować, kto ma dostęp do bazy danych, konfigurować niestandardowe szyfrowanie i optymalizator oraz ustawiać 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

Wynik polecenia:

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

4. Wczytaj dane

Aby korzystać z Data Boost, musisz mieć w bazie danych pewną ilość danych. Aby to zrobić, utworzysz zasobnik Cloud Storage, prześlesz do niego import avro i uruchomisz zadanie importu Dataflow, aby załadować dane Avro do Spannera.

Włącz interfejsy API

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

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

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.

Przygotowywanie plików importu 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 GitHub i go wyodrębnij.

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

Gdy pliki znajdą się w Cloud Storage, możesz uruchomić zadanie importu Dataflow, aby załadować 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

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

cd1cf38efd2b974a.png

Teraz uruchom to zapytanie, aby sprawdzić, czy dane są dostępne:

SELECT COUNT(*) FROM topics;

Oczekiwane dane wyjściowe:

89e5d92fbe71c022.png

5. Odczytywanie danych z BigQuery

Teraz, gdy masz już dane w Spannerze, możesz uzyskać do nich dostęp z poziomu BigQuery. Aby to zrobić, skonfiguruj w BigQuery połączenie zewnętrzne z usługą Spanner.

Jeśli masz odpowiednie uprawnienia, utwórz połączenie zewnętrzne z usługą Spanner, wykonując te czynności:

U góry konsoli BigQuery kliknij przycisk „Dodaj” i wybierz opcję „Połączenia z zewnętrznymi źródłami danych”.

580a0d237f11a9c5.png

75968de398fabf7e.png

Możesz teraz uruchomić zapytanie, aby odczytać dane z usługi Spanner. Uruchom to zapytanie w konsoli BigQuery, pamiętając o zastąpieniu wartością ${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

Na karcie „Informacje o zadaniu” możesz sprawdzić informacje o zadaniu, np. czas jego wykonania i ilość przetworzonych danych.

9ae40b0aa8c4891.png

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

6. Odczytywanie danych za pomocą Data Boost

Aby korzystać z funkcji Spanner Data Boost, musisz utworzyć nowe połączenie zewnętrzne z BigQuery do Spannera. W konsoli BigQuery kliknij „Dodaj” i ponownie wybierz „Connections from external data sources”.

Wypełnij szczegóły tym samym identyfikatorem URI połączenia z Spannerem. Zmień „Identyfikator połączenia” i zaznacz pole „Użyj zwiększenia ilości danych”.

8e2205255b56a279.png

Po utworzeniu połączenia Data Boost możesz uruchomić to samo zapytanie, ale z nową nazwą połączenia. Ponownie 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ę ten sam zestaw wyników co wcześniej. Czy czas się zmienił?

7. Informacje o Data Boost

Funkcja Spanner Data Boost umożliwia korzystanie z zasobów niezwiązanych z zasobami instancji Spannera. Pozwala to przede wszystkim zmniejszyć wpływ zadań analitycznych na zadania operacyjne.

Możesz to sprawdzić, uruchamiając zapytanie bez Data Boost kilka razy w ciągu 2–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 odczekaj kilka minut i uruchom zapytanie, aby jeszcze kilka razy skorzystać z funkcji Data Boost. 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;

Wróć do Spanner Studio w konsoli Cloud i otwórz System Insights.

c1dc67fcc7a2a71.png

Tutaj możesz zobaczyć dane dotyczące procesora. Zapytania uruchamiane bez Data Boost korzystają z procesora w przypadku operacji „executesql_select_withpartitiontoken”. Mimo że zapytanie jest takie samo, wykonanie Data Boost nie jest widoczne w wykorzystaniu procesora instancji.

a86a7508b6738904.png

W wielu przypadkach wydajność zapytania analitycznego wzrośnie, gdy użyjesz Data Boost. Zbiór danych w tym samouczku jest mały i nie ma innych zadań konkurujących o zasoby. Dlatego w tym samouczku nie oczekujemy poprawy wydajności.

Możesz eksperymentować z zapytaniami i obciążeniami, aby sprawdzić, jak działa Data Boost. Gdy skończysz, przejdź do następnej sekcji, aby zwolnić miejsce w środowisku.

8. Zwalnianie miejsca w środowisku

Jeśli Twój projekt został utworzony specjalnie na potrzeby tego ćwiczenia, możesz go po prostu usunąć. Jeśli chcesz zachować projekt i zwolnić miejsce w poszczególnych komponentach, wykonaj te czynności.

Usuwanie połączeń z BigQuery

Aby usunąć oba połączenia, kliknij 3 kropki obok nazwy połączenia. Wybierz „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

Usuń instancję Spannera

Aby posprzątać, otwórz sekcję Cloud Spanner w konsoli Cloud i usuń instancję „codelab-demo”, którą utworzyliśmy w tym samouczku.

ab7c83ebdab74c04.png

9. Gratulacje

Gratulujemy ukończenia ćwiczenia.

Omówione zagadnienia

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

10. Ankieta

Dane wyjściowe:

Jak zamierzasz korzystać z tego samouczka?

Tylko przeczytaj Przeczytaj i wykonaj ćwiczenia