Crea ed esegui query su un database utilizzando gcloud CLI

Obiettivi

Questo tutorial illustra i passaggi seguenti utilizzando gcloud a strumento a riga di comando.

  • Creare un'istanza, un database e uno schema Spanner
  • Scrivere i dati nel database ed eseguire query SQL su tali dati
  • Esegui la pulizia eliminando il database e l'istanza

Per il riferimento completo di gcloud spanner, consulta gcloud spanner.

Prezzi

Questo tutorial utilizza Spanner, che è un componente fatturabile di in Google Cloud. Per informazioni sul costo di utilizzo di Spanner, consulta Prezzi.

Prima di iniziare

  1. Completa la procedura descritta in Installa l'interfaccia alla gcloud CLI e configura l'API Cloud Spanner, che tratta la creazione e l'impostazione di un progetto Google Cloud predefinito, abilitando fatturazione, abilitare l'API Cloud Spanner e configurare OAuth 2.0 per e credenziali di autenticazione per utilizzare l'API Cloud Spanner.

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

Imposta un progetto predefinito

Se non lo hai già fatto, imposta l'ID di un progetto Google Cloud 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 seguenti come primo argomento a gcloud spanner. Ad esempio:

gcloud spanner --project=PROJECT_ID instance-configs list

Istanze

Quando utilizzi Spanner per la prima volta, devi creare un'istanza, ovvero delle risorse usate dai database Spanner. Quando crei un'istanza, scegli dove archiviare i tuoi dati e quanto capacità di calcolo dell'istanza.

Istanze e configurazioni di istanze

Per creare un'istanza, devi selezionarne una configurazione, che è una sorta di progetto dell'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 esecuzione in un'istanza Compute Engine. Puoi scegliere una configurazione a livello di regione, che archivia i dati in una una regione doppia, che archivia i dati in due regioni nello stesso paese; oppure una configurazione multiregionale, che distribuisce i dati su più regioni. regioni. Per ulteriori informazioni, consulta la panoramica delle istanze.

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

gcloud spanner instance-configs list

Dovresti vedere un elenco di configurazioni a livello di una regione, di due regioni e di più regioni.

Crea un'istanza

Per creare un'istanza denominata test-instance con il nome visualizzato My Instance utilizzando la configurazione dell'istanza a livello di regione 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.

Imposta l'istanza predefinita

Puoi impostare l'istanza predefinita utilizzata da Spanner quando non hai specifica 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

Utilizzare il Data Definition Language di Spanner (DDL) per creare, modificare o eliminare le tabelle e creare o eliminare gli 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 l'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.

Corsa di 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 dell'operazione da eseguire controllo.

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
...

Scrittura di 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 articoli negli elenchi. Nell'ultimo inserimento abbiamo specificato i due punti (^:^) come delimitatore in modo da poter utilizzare un 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')"

Eseguire 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 il riferimento SQL di Spanner, consulta Sintassi delle query per GoogleSQL oppure Sintassi delle query per PostgreSQL.

Per visualizzare un elenco di flag che puoi utilizzare con il comando execute-sql, vedi gcloud spanner pods Esegui-sql.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi aggiuntivi per usate in questo tutorial, elimina il database ed elimina l'istanza che hai creato.

Trascina 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 è irreversibile.