Crea ed esegui query su un database utilizzando Google Cloud CLI

Obiettivi

Questo tutorial ti guida attraverso i seguenti passaggi utilizzando il gcloud CLI:

  • Crea un'istanza, un database e uno schema Spanner
  • Scrivi i dati nel database ed esegui query SQL su questi dati
  • Libera spazio eliminando il database e l'istanza

Le procedure descritte in questa pagina si applicano sia ai database con dialetto GoogleSQL sia a quelli con dialetto PostgreSQL.

Per la documentazione di riferimento completa di Spanner gcloud, consulta gcloud.

Prezzi

Questo tutorial utilizza Spanner, un componente fatturabile di Google Cloud. Per informazioni sul costo dell'utilizzo di Spanner, consulta la pagina Prezzi.

Prima di iniziare

Completa i passaggi descritti in Installare gcloud CLI e configurare l'API Cloud Spanner, che riguardano la creazione e l'impostazione di un progetto Google Cloud predefinito, l'abilitazione della fatturazione, l'abilitazione dell' API Cloud Spanner e la configurazione di OAuth 2.0 per ottenere le credenziali di autenticazione da utilizzare con l'API Cloud Spanner.

In particolare, assicurati di eseguire gcloud auth application-default login per configurare l'ambiente di sviluppo locale con le credenziali di autenticazione.

Imposta un progetto predefinito

Se non l'hai ancora fatto, imposta l'ID di un Google Cloud progetto come progetto predefinito per Google Cloud CLI:

gcloud config set project PROJECT_ID

Se non imposti il progetto predefinito, devi passare --project PROJECT_ID a ciascuno dei comandi riportati di seguito come primo argomento di gcloud. Ad esempio:

gcloud --project=PROJECT_ID spanner instance-configs list

Istanze

La prima volta che utilizzi Spanner, devi creare un'istanza, ovvero un'allocazione di risorse utilizzate dai database Spanner. Quando crei un'istanza, scegli dove archiviare i dati e la capacità di calcolo dell'istanza.

Istanze e configurazioni delle istanze

Per creare un'istanza, devi selezionare una configurazione dell'istanza, che è simile a un progetto per l'istanza che definisce il posizionamento geografico e la replica dei dati Spanner.

Elenca le configurazioni delle istanze

Quando crei un'istanza, devi specificare una configurazione dell'istanza, che definisce il posizionamento geografico e la replica dei database in quell' istanza. Puoi scegliere una configurazione regionale, che archivia i dati in una regione, una configurazione a due regioni, che archivia i dati in due regioni dello stesso paese, o una configurazione multiregionale, che distribuisce i dati in più regioni. Per saperne di più, consulta la panoramica delle istanze.

Per visualizzare l'insieme di configurazioni delle istanze disponibili per il tuo progetto:

gcloud spanner instance-configs list

Dovresti visualizzare un elenco di configurazioni regionali, a due regioni e multiregionali.

Crea un'istanza

Per creare un'istanza denominata test-instance con il nome visualizzato My Instance utilizzando la configurazione dell'istanza regionale regional-us-central1 con 1 nodo:

gcloud spanner instances create test-instance --config=regional-us-central1 \
    --description="My Instance" --nodes=1

Nel comando precedente, il nome dell'istanza è impostato su test-instance e --description imposta il nome visualizzato dell'istanza. Entrambi questi valori devono essere univoci all'interno di un progetto Google Cloud Platform.

utilizza l'ID istanza, non il nome visualizzato.

Imposta l'istanza predefinita

Puoi impostare l'istanza predefinita utilizzata da Spanner quando non hai specificato un'istanza nel comando. Per impostare l'istanza predefinita:

gcloud config set spanner/instance test-instance

Crea un database

Crea un database denominato example-db. Per impostazione predefinita, il dialetto del database è GoogleSQL.

GoogleSQL

gcloud spanner databases create example-db

PostgreSQL

gcloud spanner databases create example-db --database-dialect=POSTGRESQL

Aggiorna lo schema

Utilizza il linguaggio di definizione dei dati Data Definition Language (DDL) di Spanner per creare, modificare o eliminare tabelle e per creare o eliminare indici.

Creiamo due tabelle:

GoogleSQL

gcloud spanner databases ddl update example-db \
--ddl='CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX) ) PRIMARY KEY (SingerId)'

gcloud spanner databases ddl update example-db \
--ddl='CREATE TABLE Albums ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, AlbumTitle STRING(MAX)) PRIMARY KEY (SingerId, AlbumId), INTERLEAVE IN PARENT Singers ON DELETE CASCADE'

PostgreSQL

gcloud spanner databases ddl update example-db \
--ddl='CREATE TABLE Singers ( SingerId bigint NOT NULL, FirstName varchar(1024), LastName varchar(1024), SingerInfo bytea, PRIMARY KEY (SingerId) )'

gcloud spanner databases ddl update example-db \
--ddl='CREATE TABLE Albums ( SingerId bigint NOT NULL, AlbumId bigint NOT NULL, AlbumTitle varchar, PRIMARY KEY (SingerId, AlbumId) ) INTERLEAVE IN PARENT Singers ON DELETE CASCADE'

Per verificare lo stato di avanzamento dell'operazione, utilizza gcloud spanner operations describe. Questo comando richiede l'ID operazione.

Recupera l'ID operazione:

gcloud spanner operations list --instance="test-instance" \
--database=DATABASE-NAME --type=DATABASE_UPDATE_DDL

Sostituisci DATABASE-NAME con il nome del database.

Esegui gcloud spanner operations describe:

gcloud spanner operations describe \
  --instance="test-instance" \
  --database="example-db" \
  projects/PROJECT-NAME/instances/test-instance/databases/example-db/operations/OPERATION-ID

Sostituisci quanto segue:

  • PROJECT-NAME: il nome del progetto.
  • OPERATION-ID: l'ID operazione dell'operazione che vuoi controllare.

L'output è simile al seguente:

done: true
metadata:
...
progress:
- endTime: '2022-03-01T00:28:06.691403Z'
  progressPercent: 100
  startTime: '2022-03-01T00:28:04.221401Z'
- endTime: '2022-03-01T00:28:17.624588Z'
  startTime: '2022-03-01T00:28:06.691403Z'
  progressPercent: 100
...

Scrivi dati

Aggiungiamo alcuni dati di esempio al nostro database

GoogleSQL

gcloud spanner rows insert --database=example-db \
  --table=Singers \
  --data=SingerId=1,FirstName=Marc,LastName=Richards

gcloud spanner rows insert --database=example-db \
  --table=Singers \
  --data=SingerId=2,FirstName=Catalina,LastName=Smith

gcloud spanner rows insert --database=example-db \
  --table=Singers \
  --data=SingerId=3,FirstName=Alice,LastName=Trentor

gcloud spanner rows insert --database=example-db \
  --table=Albums \
  --data=SingerId=1,AlbumId=1,AlbumTitle="Total Junk"

gcloud spanner rows insert --database=example-db \
  --table=Albums \
  --data=SingerId=2,AlbumId=1,AlbumTitle="Green"

gcloud spanner rows insert --database=example-db \
  --table=Albums \
  --data=^:^SingerId=2:AlbumId=2:AlbumTitle="Go, Go, Go"

Per impostazione predefinita, viene utilizzata una virgola per delimitare gli elementi negli elenchi. Nell'ultimo comando di inserimento, abbiamo specificato un due punti (^:^) come delimitatore in modo da poter utilizzare una virgola nel titolo dell'album.

PostgreSQL

gcloud spanner databases execute-sql example-db \
  --sql="INSERT INTO Singers (SingerId, FirstName, LastName) VALUES (1, 'Marc', 'Richards')"

gcloud spanner databases execute-sql example-db \
  --sql="INSERT INTO Singers (SingerId, FirstName, LastName) VALUES (2, 'Catalina', 'Smith')"

gcloud spanner databases execute-sql example-db   \
  --sql="INSERT INTO Singers (SingerId, FirstName, LastName) VALUES (3, 'Alice', 'Trentor')"

gcloud spanner databases execute-sql example-db   \
  --sql="INSERT INTO Albums (SingerId, AlbumId, AlbumTitle) VALUES (1, 1, 'Total Junk')"

gcloud spanner databases execute-sql example-db   \
  --sql="INSERT INTO Albums (SingerId, AlbumId, AlbumTitle) VALUES (2, 1, 'Green')"

gcloud spanner databases execute-sql example-db   \
  --sql="INSERT INTO Albums (SingerId, AlbumId, AlbumTitle) VALUES (2, 2, 'Go, Go, Go')"

Esegui query sui dati utilizzando SQL

Esegui una query dalla riga di comando:

gcloud spanner databases execute-sql example-db \
    --sql='SELECT SingerId, AlbumId, AlbumTitle FROM Albums'

Per la documentazione di riferimento di Spanner SQL, consulta Sintassi delle query per GoogleSQL o Sintassi delle query per PostgreSQL.

Per visualizzare un elenco dei flag che puoi utilizzare con il execute-sql comando, consulta gcloud spanner databases execute-sql.

Esegui la pulizia

Per evitare che al tuo Google Cloud account vengano addebitati costi aggiuntivi, elimina il database e l'istanza. La disattivazione dell'API Cloud Billing non interrompe gli addebiti. Quando elimini un'istanza, vengono eliminati tutti i database al suo interno.

Elimina un database

Per eliminare un'istanza esistente:

gcloud spanner databases delete example-db

Elimina un'istanza

Per eliminare un'istanza esistente:

gcloud spanner instances delete test-instance

Tieni presente che l'eliminazione di un'istanza comporta anche l'eliminazione di tutti i database al suo interno. L'eliminazione di un'istanza non è reversibile.