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.
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
- 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ć.
- 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.
- 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:
Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:
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.
Teraz uruchom to zapytanie, aby się upewnić, że dane są dostępne:
SELECT COUNT(*) FROM topics;
Oczekiwane dane wyjściowe:
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”. .
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:
W sekcji „Informacje o zadaniu” możesz zobaczyć informacje o zadaniu, takie jak czas trwania i ilość przetworzonych danych. .
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” .
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.
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ę.
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.
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.
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: