Como inserir, atualizar e excluir dados usando a Google Cloud CLI

Nesta página, descrevemos como inserir, atualizar e excluir dados usando a ferramenta de linha de comando gcloud.

Modificar dados usando a DML

Para executar instruções de linguagem de manipulação de dados (DML, na sigla em inglês), use o comando gcloud spanner databases execute-sql. O exemplo a seguir adiciona uma nova linha à tabela Singers.

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

Para executar uma instrução DML particionada, use o comando gcloud spanner databases execute-sql com a opção --enable-partitioned-dml. O exemplo a seguir atualiza linhas na tabela Albums.

gcloud spanner databases execute-sql example-db \
    --instance=test-instance --enable-partitioned-dml \
    --sql='UPDATE Albums SET MarketingBudget = 0 WHERE MarketingBudget IS NULL'

Para ver a referência de DML do Spanner, consulte Sintaxe da linguagem de manipulação de dados.

Modificar linhas usando o grupo de comandos de linhas

Use o grupo de comandos gcloud spanner rows para modificar dados em um banco de dados:

  • Inserir novas linhas em uma tabela.
  • Atualizar colunas em linhas existentes em uma tabela.
  • Excluir linhas de uma tabela.

O grupo de comandos rows reconhece literais de todos os tipos de coluna válidos.

Inserir uma linha em uma tabela

Para inserir uma nova linha em uma tabela, é preciso incluir valores para as colunas de chave e para outras colunas obrigatórias:

gcloud spanner rows insert --instance=INSTANCE_ID --database=DATABASE_ID \
    --table=TABLE_NAME \
    --data=COL_NAME_1=COL_VALUE_1,COL_NAME_2=COL_VALUE_2,COL_NAME_3=COL_VALUE_3,...,COL_NAME_N=COL_VALUE_N

O exemplo a seguir insere uma nova linha na tabela Singers:

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

Atualizar uma linha em uma tabela

Para atualizar uma linha em uma tabela, é preciso incluir valores para as colunas de chave e para as colunas que você quer atualizar:

gcloud spanner rows update --instance=INSTANCE_ID --database=DATABASE_ID \
    --table=TABLE_NAME \
    --data=COL_NAME_1=COL_VALUE_1,COL_NAME_2=COL_VALUE_2,COL_NAME_3=COL_VALUE_3,...,COL_NAME_N=COL_VALUE_N

O exemplo a seguir atualiza uma linha na tabela Singers:

gcloud spanner rows update --instance=test-instance --database=example-db \
    --table=Singers \
    --data=SingerId=1,FirstName='Marc',LastName='Richards'

Não é possível alterar os valores principais usando o comando update. Para atualizar um valor de chave, é preciso criar uma nova linha e excluir a linha existente.

Excluir uma linha de uma tabela

Para excluir uma linha, você precisa especificar os valores para as colunas de chave primária:

gcloud spanner rows delete --instance=INSTANCE_ID --database=DATABASE_ID  \
    --table=TABLE_NAME \
    --keys=KEY_VALUE_1,KEY_VALUE_2,KEY_VALUE_3
No exemplo a seguir, uma linha da tabela "Singers" é excluída:
gcloud spanner rows delete --instance=test-instance --database=example-db \
    --table=Singers \
    --keys=1

Especificar valores de matriz

Para inserir ou atualizar valores em uma coluna ARRAY, coloque os dados em um arquivo YAML e use a opção --flags-file.

Por exemplo, este arquivo YAML especifica a matriz [1,2,3] para a coluna Numbers:

# stats.yaml
--data:
    Id: 1
    Locked: True
    Numbers:
        - 1
        - 2
        - 3

Para inserir uma linha com os dados YAML, use a opção --flags-file:

gcloud spanner rows insert --instance=test-instance --database=example-db \
     --table=Stats \
     --flags-file stats.yaml

Para uma matriz NULL, não inclua um valor para Numbers no arquivo:

# stats.yaml
--data:
    Id: 1
    Locked: True

Para uma matriz vazia, defina-a como []:

# stats.yaml
--data:
    Id: 1
    Locked: True
    Numbers: []

Especificar carimbos de data/hora de commit

Para inserir ou atualizar um valor automaticamente em uma coluna de carimbo de data/hora da confirmação, transmita spanner.commit_timestamp() como o valor da coluna. O exemplo a seguir grava o carimbo de data/hora da confirmação na coluna LastUpdated quando a linha é inserida.

gcloud spanner rows insert --instance=test-instance --database=example-db \
    --table=Singers \
    --data=SingerId=1,LastUpdated='spanner.commit_timestamp()'

O exemplo a seguir grava um valor de carimbo de data/hora específico na coluna LastUpdated:

gcloud spanner rows update --instance=test-instance --database=example-db \
    --table=Singers \
    --data=SingerId=1,LastUpdated=2017-01-02T12:34:00.45Z