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 mit föderierten Zero-ETL-Abfragen 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 in der bereitgestellten Spanner-Instanz mithilfe eines serverlosen On-Demand-Nutzungsmodells ausführen.

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

Vorbereitung

  • Grundlegendes Verständnis der Google Cloud Console
  • Grundkenntnisse in der Befehlszeile und in Google Shell

Lerninhalte

  • Spanner-Instanz bereitstellen
  • Daten zum Erstellen einer Spanner-Datenbank laden
  • Ohne Data Boost aus BigQuery auf Spanner-Daten zugreifen
  • Mit Data Boost aus 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 Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf deine Projekt-ID verweisen, die üblicherweise als PROJECT_ID bezeichnet wird. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID generieren. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts erhalten.
  • Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab ist kostengünstig. Sie können die von Ihnen erstellten Ressourcen oder das Projekt löschen, um Ressourcen herunterzufahren, um zu vermeiden, dass über diese Anleitung hinaus Kosten anfallen. Neue Google Cloud-Nutzer haben Anspruch auf das kostenlose Testprogramm mit 300$Guthaben.

Cloud Shell starten

Sie können Google Cloud zwar von Ihrem Laptop aus der Ferne bedienen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, 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 dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:

7ffe5cbb04455448.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Alle Arbeiten in diesem Codelab können in einem Browser erledigt 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)

Legen Sie us-central1 als Standardregion fest. Sie können diese Einstellung gerne in eine andere Region ändern, die von den regionalen Konfigurationen von Spanner 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 den folgenden 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 die Instanz ausgeführt wird, können Sie die Datenbank erstellen. Spanner ermöglicht die Verwendung mehrerer Datenbanken in einer einzelnen Instanz.

In der Datenbank definieren Sie Ihr Schema. Sie können auch steuern, wer Zugriff auf die Datenbank hat, eine benutzerdefinierte Verschlüsselung einrichten, das Optimierungstool konfigurieren und die Aufbewahrungsdauer festlegen.

Verwenden Sie zum Erstellen der Datenbank wieder 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 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, die Compute, Cloud Storage und Dataflow APIs zu aktivieren.

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 extrahieren 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 Bucket hoch, den Sie erstellt haben.

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

Mit den Dateien in Cloud Storage 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 Spanner überprüfen

Rufen Sie nun Spanner Studio auf und prüfen Sie, ob die Daten vorhanden sind. Maximieren Sie zuerst die Thementabelle, um die Spalten zu sehen.

cd1cf38efd2b974a.png

Führen Sie nun die folgende Abfrage aus, um sicherzustellen, dass Daten verfügbar sind:

SELECT COUNT(*) FROM topics;

Erwartete Ausgabe:

89e5d92fbe71c022.png

5. Daten aus BigQuery lesen

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

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

Klicken Sie auf „Hinzufügen“ oben in der BigQuery-Konsole und wählen Sie "Verbindungen zu ewigen Datenquellen" aus. Option.

580a0d237f11a9c5.png

75968de398fabf7e.png

Sie können jetzt eine Abfrage ausführen, um Daten aus Spanner zu lesen. Führen Sie die folgende Abfrage in der BigQuery-Konsole aus und ersetzen Sie ${PROJECT_ID} durch den Wert:

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

Informationen zum Job, wie die Ausführungsdauer und die Menge der verarbeiteten Daten, finden Sie unter "Jobinformationen". .

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 auf „Hinzufügen“. in der BigQuery-Konsole und wählen Sie „Connections from external data sources“ aus. noch einmal.

Geben Sie in die Details denselben Verbindungs-URI zu Spanner ein. Verbindungs-ID ändern und aktivieren Sie die Spalte „Nutzung Daten-Boost“, .

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 Projekt-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 dieselben Ergebnisse wie zuvor erhalten. Hat sich das Timing geändert?

7. Grundlagen von Data Boost

Spanner Data Boost ermöglicht es Ihnen, Ressourcen zu verwenden, die nicht mit den Ressourcen Ihrer Spanner-Instanz zusammenhängen. Dadurch werden in erster Linie die Auswirkungen Ihrer Analysearbeitslasten auf Ihre operativen Arbeitslasten reduziert.

Sie können dies sehen, wenn Sie die Abfrage ausführen, um Data Boost einige Male über zwei oder drei Minuten nicht 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_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 und zu „System Insights“ zurück.

c1dc67fcc7a2a71.png

Hier sehen Sie die CPU-Messwerte. Die Abfragen, die ohne Data Boost ausgeführt werden, verbrauchen CPU für „executesql_select_withpartitiontoken“ Geschäftsabläufe. Obwohl die Abfrage dieselbe ist, wird die Data Boost-Ausführung nicht für die CPU-Auslastung Ihrer Instanz angezeigt.

a86a7508b6738904.png

In vielen Fällen verbessert sich die Leistung der analytischen Abfrage bei Verwendung von Data Boost. Das Dataset in dieser Anleitung ist klein und es gibt keine anderen Arbeitslasten, die um Ressourcen konkurrieren. Daher ist davon auszugehen, dass in dieser Anleitung keine Leistungsverbesserungen aufgezeigt werden.

Experimentieren Sie gerne mit den Abfragen und Arbeitslasten und sehen Sie sich an, 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 behalten 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 zum Löschen der Verbindung.

c9348832bcf202a9.png

Cloud Storage-Bucket löschen

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

Spanner-Instanz löschen

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

ab7c83ebdab74c04.png

9. Glückwunsch

Herzlichen Glückwunsch zum Abschluss des Codelabs.

Behandelte Themen

  • Spanner-Instanz bereitstellen
  • Daten mit Dataflow in Spanner laden
  • Über BigQuery auf Spanner-Daten zugreifen
  • Mit Spanner Data Boost Auswirkungen auf Ihre Spanner-Instanz für analytische Abfragen aus BigQuery vermeiden

10. Umfrage

Ausgabe:

Wie möchten Sie diese Anleitung nutzen?

<ph type="x-smartling-placeholder"></ph> Lesen Sie sie nur durch. Lies sie dir durch und absolviere die Übungen