Introduzione a Spanner Data Boost e BigQuery

1. Introduzione

In questo codelab imparerai a utilizzare Spanner Data Boost per eseguire query sui dati Spanner da BigQuery utilizzando query federate zero-ETL e senza influire sul database Spanner.

f1de68f762a86cc7.png

Spanner Data Boost è un servizio serverless completamente gestito che fornisce risorse di computing indipendenti per i carichi di lavoro Spanner supportati. Data Boost consente di eseguire query di analisi ed esportazioni dei dati con un impatto quasi zero sui carichi di lavoro esistenti sull'istanza Spanner di cui è stato eseguito il provisioning utilizzando un modello di utilizzo on demand serverless.

Se abbinato a connessioni esterne di BigQuery, Data Boost consente di eseguire facilmente query sui dati da Spanner alla tua piattaforma di analisi dei dati senza spostare complessi dati ETL.

Prerequisiti

  • Conoscenza di base di Google Cloud e della console
  • Competenze di base dell'interfaccia a riga di comando e della shell di Google

Obiettivi didattici

  • Eseguire il deployment di un'istanza Spanner
  • Come caricare i dati per creare un database Spanner
  • Come accedere ai dati Spanner da BigQuery senza Data Boost
  • Come accedere ai dati Spanner da BigQuery con Data Boost

Che cosa ti serve

  • Un account Google Cloud e un progetto Google Cloud
  • Un browser web come Chrome.

2. Configurazione e requisiti

Configurazione dell'ambiente autogestito

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarla.
  • L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, dovrai fare riferimento al tuo ID progetto (in genere identificato come PROJECT_ID). Se l'ID generato non ti soddisfa, potresti generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto.
  • Per informazione, c'è un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare risorse/API Cloud. L'esecuzione di questo codelab non ha alcun costo. Per arrestare le risorse ed evitare di incorrere in fatturazione dopo questo tutorial, puoi eliminare le risorse che hai creato o eliminare il progetto. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

Avvia Cloud Shell

Anche se Google Cloud può essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Dalla console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

55efc1aaa7a4d3ad.png

Dovrebbe richiedere solo qualche istante per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere una schermata simile al seguente:

7ffe5cbb04455448.png

Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Tutto il lavoro in questo codelab può essere svolto all'interno di un browser. Non occorre installare nulla.

3. Creare un'istanza e un database Spanner

Abilita l'API Spanner

All'interno di Cloud Shell, assicurati che l'ID progetto sia configurato:

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

Configura la tua regione predefinita su us-central1. Se vuoi, puoi cambiare la regione supportata dalle configurazioni regionali di Spanner.

gcloud config set compute/region us-central1

Abilita l'API Spanner:

gcloud services enable spanner.googleapis.com

crea l'istanza Spanner

In questo passaggio configuriamo la nostra istanza di Spanner per il codelab. Per farlo, apri Cloud Shell ed esegui questo comando:

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

Output comando:

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

crea il database

Quando l'istanza è in esecuzione, puoi creare il database. Spanner consente di avere più database su una singola istanza.

Il database è il luogo in cui definisci lo schema. Puoi anche controllare chi ha accesso al database, impostare la crittografia personalizzata, configurare l'ottimizzatore e impostare il periodo di conservazione.

Per creare il database, utilizza nuovamente lo strumento a riga di comando gcloud:

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

Output comando:

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

4. Carica dati

Prima di poter utilizzare Data Boost, devi disporre di alcuni dati nel database. Per farlo, creerai un bucket Cloud Storage, caricherai un'importazione avro nel bucket e avvierai un job di importazione di Dataflow per caricare i dati Avro in Spanner.

Abilita API

Per farlo, apri un prompt di Cloud Shell se quello precedente è stato chiuso.

Assicurati di abilitare le API Compute, Cloud Storage e Dataflow.

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

Output console previsto:

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

Importazione temporanea di file su Cloud Storage

Ora, crea il bucket in cui archiviare i file avro:

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

Output console previsto:

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

Quindi, scarica il file tar da GitHub ed estrailo.

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

Output console previsto:

$ 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

Ora carica i file nel bucket che hai creato.

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

Output console previsto:

$ 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

Importa dati

Con i file in Cloud Storage, puoi avviare un job di importazione di Dataflow per caricare i dati in Spanner.

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

Output console previsto:

$ 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

Puoi controllare lo stato del job di importazione con questo comando.

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

Output console previsto:

$ 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

Verificare i dati in Spanner

Ora, vai a Spanner Studio e assicurati che i dati siano presenti. Innanzitutto, espandi la tabella degli argomenti per visualizzare le colonne.

cd1cf38efd2b974a.png

Ora esegui questa query per assicurarti che i dati siano disponibili:

SELECT COUNT(*) FROM topics;

Output previsto:

89e5d92fbe71c022.png

5. Leggi i dati da BigQuery

Ora che hai dei dati in Spanner, è il momento di accedervi da BigQuery. Per farlo, devi configurare una connessione esterna a Spanner in BigQuery.

Se disponi delle autorizzazioni corrette, segui questi passaggi per creare una connessione esterna a Spanner.

Fai clic sul pulsante in alto nella console BigQuery e seleziona "Connessioni a origini dati eterne" .

580a0d237f11a9c5.png

75968de398fabf7e.png

Ora puoi eseguire una query per leggere i dati da Spanner. Esegui questa query nella console BigQuery, assicurandoti di sostituire il valore di ${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;

Output di esempio:

e47265487c3e39bd.png

Nella sezione "Informazioni job" puoi vedere informazioni sul job, ad esempio quanto tempo è stato necessario per essere eseguito e quanti dati sono stati elaborati .

9ae40b0aa8c4891.png

Poi aggiungerai una connessione Data Boost a Spanner e confronterai i risultati.

6. Leggere i dati utilizzando Data Boost

Per utilizzare Spanner Data Boost, devi creare una nuova connessione esterna da BigQuery a Spanner. Fai clic su "Aggiungi". nella console BigQuery e seleziona "Connections from external data sources" di nuovo.

Inserisci i dettagli con lo stesso URI di connessione a Spanner. Modifica "Connection ID" (ID connessione) e seleziona "Utilizza boost dati" .

8e2205255b56a279.png

Una volta creata la connessione Data Boost, puoi eseguire la stessa query ma con il nuovo nome della connessione. Anche in questo caso, sostituisci il tuo project_id nella query.

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;

Dovresti ottenere lo stesso insieme di risultati di prima. Il tempo è cambiato?

7. Informazioni su Data Boost

Spanner Data Boost consente di utilizzare risorse non correlate alle risorse dell'istanza Spanner. Questo riduce principalmente l'impatto dei carichi di lavoro analitici sui carichi di lavoro operativi.

Puoi verificarlo se esegui la query per non utilizzare Data Boost alcune volte in due o tre minuti. Ricordati di sostituire ${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;

Quindi, attendi qualche minuto in più ed esegui la query per utilizzare Data Boost ancora qualche volta. Ricordati di sostituire ${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;

Ora torna a Spanner Studio nella console Cloud e vai a System Insights

c1dc67fcc7a2a71.png

Qui puoi vedere le metriche della CPU. Le query eseguite senza Data Boost utilizzano la CPU per "executesql_select_withpartitiontoken" operazioni. Anche se la query è la stessa, l'esecuzione di Data Boost non viene visualizzata sull'utilizzo della CPU dell'istanza.

a86a7508b6738904.png

In molti casi, le prestazioni della query analitica migliorano quando si utilizza Data Boost. Il set di dati in questo tutorial è ridotto e non ci sono altri carichi di lavoro in concorrenza per le risorse. Di conseguenza, in questo tutorial non sono previsti miglioramenti delle prestazioni.

Sentiti libero di sperimentare con le query e i carichi di lavoro e scoprire come funziona Data Boost. Al termine, vai alla sezione successiva per pulire l'ambiente.

8. Pulisci l'ambiente

Se hai creato il tuo progetto appositamente per questo codelab, puoi semplicemente eliminarlo per ripulirlo. Se vuoi conservare il progetto e ripulire i singoli componenti, procedi con i seguenti passaggi.

Rimuovi connessioni BigQuery

Per rimuovere entrambe le connessioni, fai clic sui tre puntini accanto al nome della connessione. Seleziona "Elimina", quindi segui le istruzioni per eliminare il collegamento.

c9348832bcf202a9.png

Elimina bucket Cloud Storage

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

Elimina istanza Spanner

Per eseguire la pulizia, vai alla sezione Cloud Spanner della console Cloud ed elimina "codelab-demo" creata nel codelab.

ab7c83ebdab74c04.png

9. Complimenti

Complimenti per aver completato il codelab.

Argomenti trattati

  • Eseguire il deployment di un'istanza Spanner
  • Come caricare i dati in Spanner con Dataflow
  • Come accedere ai dati Spanner da BigQuery
  • Come utilizzare Spanner Data Boost per evitare conseguenze sull'istanza di Spanner per le query analitiche da BigQuery

10. Sondaggio

Output:

Come utilizzerai questo tutorial?

Da leggere solo Leggilo e completa gli esercizi