Erste Schritte mit Spanner Data Boost und BigQuery

1. Einführung

In diesem Codelab erfahren Sie, wie Sie mit Spanner Data Boost Spanner-Daten aus BigQuery abfragen können. Dazu verwenden Sie föderierte Zero-ETL-Abfragen, ohne die Spanner-Datenbank zu beeinträchtigen.

f1de68f762a86cc7.png

Spanner Data Boost ist ein vollständig verwalteter, serverloser Dienst, der unabhängige Rechenressourcen für unterstützte Spanner-Arbeitslasten bereitstellt. Mit Data Boost können Sie Analyseabfragen und Datenexporte nahezu ohne Auswirkungen auf vorhandene Arbeitslasten auf der bereitgestellten Spanner-Instanz ausführen. Dabei wird ein serverloses On-Demand-Nutzungsmodell verwendet.

In Kombination mit externen BigQuery-Verbindungen können Sie mit Data Boost Daten aus Spanner ganz einfach in Ihrer Datenanalyseplattform abfragen, ohne dass eine komplexe ETL-Datenübertragung erforderlich ist.

Vorbereitung

  • Grundlegende Kenntnisse der Google Cloud Console
  • Grundkenntnisse in der Befehlszeile und Google Shell

Lerninhalte

  • Cloud Spanner-Instanz bereitstellen
  • Daten zum Erstellen einer Spanner-Datenbank laden
  • Auf Spanner-Daten aus BigQuery zugreifen, ohne Data Boost zu verwenden
  • Mit Data Boost über BigQuery auf Spanner-Daten zugreifen

Voraussetzungen

  • Ein Google Cloud-Konto und ein Google Cloud-Projekt
  • Ein Webbrowser wie Chrome

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

fbef9caa1602edd0.pnga99b7ace416376c4.png5e3ff691252acf41.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie einen eigenen Namen eingeben und prüfen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testzeitraum mit einem Guthaben von 300 $ teilnehmen.

Cloud Shell starten

Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Klicken Sie in der Google Cloud Console rechts oben in der Symbolleiste auf das Cloud Shell-Symbol:

55efc1aaa7a4d3ad.png

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

7ffe5cbb04455448.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Alle Aufgaben in diesem Codelab können in einem Browser ausgeführt werden. Sie müssen nichts installieren.

3. Spanner-Instanz und -Datenbank erstellen

Spanner API aktivieren

Prüfen Sie in Cloud Shell, ob Ihre Projekt-ID eingerichtet ist:

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

Konfigurieren Sie Ihre Standardregion auf us-central1. Sie können dies in eine andere Region ändern, die von Spanner-Regionalkonfigurationen unterstützt wird.

gcloud config set compute/region us-central1

Aktivieren Sie die Spanner API:

gcloud services enable spanner.googleapis.com

Spanner-Instanz erstellen

In diesem Schritt richten wir unsere Spanner-Instanz für das Codelab ein. Öffnen Sie dazu Cloud Shell und führen Sie diesen Befehl aus:

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

Befehlsausgabe:

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

Datenbank erstellen

Sobald Ihre Instanz ausgeführt wird, können Sie die Datenbank erstellen. Spanner ermöglicht mehrere Datenbanken in einer einzelnen Instanz.

In der Datenbank definieren Sie Ihr Schema. Sie können auch festlegen, wer Zugriff auf die Datenbank hat, eine benutzerdefinierte Verschlüsselung einrichten, den Optimierer konfigurieren und den Aufbewahrungszeitraum festlegen.

Verwenden Sie zum Erstellen der Datenbank noch einmal das gcloud-Befehlszeilentool:

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

Befehlsausgabe:

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

4. Daten laden

Bevor Sie Data Boost verwenden können, müssen Sie einige Daten in der Datenbank haben. Dazu erstellen Sie einen Cloud Storage-Bucket, laden einen Avro-Import in den Bucket hoch und starten einen Dataflow-Importjob, um die Avro-Daten in Spanner zu laden.

APIs aktivieren

Öffnen Sie dazu eine Cloud Shell-Eingabeaufforderung, falls die vorherige geschlossen wurde.

Achten Sie darauf, dass die Compute Engine API, die Cloud Storage API und die Dataflow API aktiviert sind.

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

Erwartete Konsolenausgabe:

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

Importdateien in Cloud Storage bereitstellen

Erstellen Sie nun den Bucket zum Speichern der Avro-Dateien:

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

Erwartete Konsolenausgabe:

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

Laden Sie als Nächstes die TAR-Datei von GitHub herunter und entpacken Sie sie.

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

Erwartete Konsolenausgabe:

$ 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

Laden Sie die Dateien jetzt in den von Ihnen erstellten Bucket hoch.

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

Erwartete Konsolenausgabe:

$ 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

Daten importieren

Wenn die Dateien in Cloud Storage sind, können Sie einen Dataflow-Importjob starten, um die Daten in Spanner zu laden.

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

Erwartete Konsolenausgabe:

$ 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

Mit diesem Befehl können Sie den Status des Importjobs prüfen.

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

Erwartete Konsolenausgabe:

$ 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

Daten in Cloud Spanner überprüfen

Rufen Sie jetzt Spanner Studio auf und prüfen Sie, ob die Daten vorhanden sind. Maximieren Sie zuerst die Tabelle „Themen“, um die Spalten zu sehen.

cd1cf38efd2b974a.png

Führen Sie nun die folgende Abfrage aus, um zu prüfen, ob Daten verfügbar sind:

SELECT COUNT(*) FROM topics;

Erwartete Ausgabe:

89e5d92fbe71c022.png

5. Daten aus BigQuery lesen

Nachdem Sie Daten in Spanner haben, können Sie darauf in BigQuery zugreifen. Dazu richten Sie eine externe Verbindung zu Spanner in BigQuery ein.

Wenn Sie die erforderlichen Berechtigungen haben, können Sie mit den folgenden Schritten eine externe Verbindung zu Spanner erstellen.

Klicken Sie oben in der BigQuery Console auf die Schaltfläche „Hinzufügen“ und wählen Sie die Option „Verbindungen zu externen Datenquellen“ aus.

580a0d237f11a9c5.png

75968de398fabf7e.png

Sie können jetzt eine Abfrage ausführen, um Daten aus Spanner zu lesen. Führen Sie diese Abfrage in der BigQuery-Konsole aus und ersetzen Sie den Wert für ${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;

Beispielausgabe:

e47265487c3e39bd.png

Auf dem Tab „Job Information“ (Jobinformationen) finden Sie Informationen zum Job, z. B. wie lange die Ausführung gedauert hat und wie viele Daten verarbeitet wurden.

9ae40b0aa8c4891.png

Als Nächstes fügen Sie eine Data Boost-Verbindung zu Spanner hinzu und vergleichen die Ergebnisse.

6. Daten mit Data Boost lesen

Wenn Sie Spanner Data Boost verwenden möchten, müssen Sie eine neue externe Verbindung von BigQuery zu Spanner erstellen. Klicken Sie in der BigQuery-Konsole auf „Hinzufügen“ und wählen Sie noch einmal „Connections from external data sources“ aus.

Geben Sie die Details mit demselben Verbindungs-URI für Spanner ein. Ändern Sie die „Verbindungs-ID“ und setzen Sie ein Häkchen bei „Daten-Boost verwenden“.

8e2205255b56a279.png

Nachdem Sie die Data Boost-Verbindung erstellt haben, können Sie dieselbe Abfrage mit dem neuen Verbindungsnamen ausführen. Ersetzen Sie auch hier Ihre project_id in der Abfrage.

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;

Sie sollten dasselbe Ergebnisset wie zuvor erhalten. Hat sich der Zeitpunkt geändert?

7. Data Boost

Mit Spanner Data Boost können Sie Ressourcen verwenden, die nicht mit den Ressourcen Ihrer Spanner-Instanz zusammenhängen. Dadurch werden in erster Linie die Auswirkungen Ihrer analytischen Arbeitslasten auf Ihre operativen Arbeitslasten reduziert.

Das können Sie sehen, wenn Sie die Abfrage einige Male innerhalb von zwei bis drei Minuten ohne Data Boost ausführen. Denken Sie daran, ${PROJECT_ID} zu ersetzen.

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;

Warten Sie dann noch einige Minuten und führen Sie die Abfrage aus, um Data Boost noch einige Male zu verwenden. Denken Sie daran, ${PROJECT_ID} zu ersetzen.

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;

Kehren Sie nun in der Cloud Console zu Spanner Studio zurück und rufen Sie „System Insights“ auf.

c1dc67fcc7a2a71.png

Hier sehen Sie die CPU-Messwerte. Bei den Abfragen, die ohne Data Boost ausgeführt werden, wird die CPU für die Vorgänge „executesql_select_withpartitiontoken“ verwendet. Obwohl die Abfrage dieselbe ist, wird die Data Boost-Ausführung nicht in der CPU-Auslastung Ihrer Instanz angezeigt.

a86a7508b6738904.png

In vielen Fällen verbessert sich die Leistung der Analyseabfrage, wenn Sie Data Boost verwenden. Der Datensatz in dieser Anleitung ist klein und es gibt keine anderen Arbeitslasten, die um Ressourcen konkurrieren. Daher werden in dieser Anleitung keine Leistungsverbesserungen erwartet.

Sie können die Abfragen und Arbeitslasten gerne ausprobieren und sich ansehen, wie Data Boost funktioniert. Wenn Sie fertig sind, fahren Sie mit dem nächsten Abschnitt fort, um die Umgebung zu bereinigen.

8. Umgebung bereinigen

Wenn Sie Ihr Projekt speziell für dieses Codelab erstellt haben, können Sie es einfach löschen, um es zu bereinigen. Wenn Sie das Projekt beibehalten und die einzelnen Komponenten bereinigen möchten, fahren Sie mit den folgenden Schritten fort.

BigQuery-Verbindungen entfernen

Wenn Sie beide Verbindungen entfernen möchten, klicken Sie auf das Dreipunkt-Menü neben dem Verbindungsnamen. Wählen Sie „Löschen“ aus und folgen Sie der Anleitung, um die Verbindung zu löschen.

c9348832bcf202a9.png

Cloud Storage-Bucket löschen

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

Cloud Spanner-Instanz löschen

Rufen Sie zum Bereinigen einfach den Cloud Spanner-Bereich der Cloud Console auf und löschen Sie die Instanz „codelab-demo“, die wir im Codelab erstellt haben.

ab7c83ebdab74c04.png

9. Glückwunsch

Herzlichen Glückwunsch zum Abschluss des Codelabs.

Behandelte Themen

  • Cloud Spanner-Instanz bereitstellen
  • Daten mit Dataflow in Spanner laden
  • Auf Spanner-Daten aus BigQuery zugreifen
  • Spanner Data Boost verwenden, um Auswirkungen auf Ihre Spanner-Instanz bei analytischen Abfragen aus BigQuery zu vermeiden

10. Umfrage

Ausgabe:

Wie werden Sie diese Anleitung verwenden?

Nur durchlesen Lesen und Übungen machen