Criar e gerenciar posições de dados

Esta página descreve como criar e gerenciar posicionamentos de dados no Spanner.

Para mais informações sobre como o geoparticionamento funciona, consulte a visão geral do geoparticionamento.

Criar um posicionamento de dados

Depois de criar as partições da instância do Spanner e os bancos de dados, crie o posicionamento.

Console

  1. Acesse a página Instâncias no Google Cloud console.

    Instâncias

  2. Selecione a instância com partições de instância criadas pelo usuário.

  3. Selecione o banco de dados que você quer particionar.

  4. No menu de navegação, clique em Spanner Studio.

  5. Na página Spanner Studio, clique em Nova guia ou use a guia do editor vazia.

  6. Insira a instrução DDL CREATE PLACEMENT (GoogleSQL, PostgreSQL) .

    Por exemplo, execute o comando a seguir para criar uma tabela de posicionamento europeplacement na partição de instância europe-partition:

    GoogleSQL

    CREATE PLACEMENT europeplacement OPTIONS (instance_partition="europe-partition");
    

    PostgreSQL

    CREATE PLACEMENT europeplacement WITH (instance_partition='europe-partition');
    

    Opcional: também é possível usar o painel Object Explorer para visualizar, pesquisar e interagir com os objetos de posicionamento. Para mais informações, consulte Explorar seus dados.

  7. Clique em Executar.

gcloud

Para criar um posicionamento com o comando da Google Cloud CLI, use gcloud spanner databases ddl update.

Por exemplo, crie um posicionamento na partição de instância europe-partition:

GoogleSQL

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="CREATE PLACEMENT europeplacement OPTIONS (instance_partition='europe-partition')"

PostgreSQL

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="CREATE PLACEMENT europeplacement WITH (instance_partition='europe-partition')"

Definir o líder padrão de um posicionamento

É possível definir a região líder padrão de um posicionamento se o local estiver em uma região dupla ou multirregional. A nova região líder precisa ser uma das duas regiões de leitura e gravação no local de posicionamento de região dupla ou multirregional. Para mais informações, consulte as tabelas Configurações disponíveis de região dupla e Configurações disponíveis multirregionais.

Se você não definir uma região líder, o posicionamento vai usar a região líder padrão especificada pelo local. Para uma lista da região líder de cada local de região dupla ou multirregional, consulte as tabelas Configurações disponíveis de região dupla e Configurações disponíveis multirregionais. A região líder padrão é indicada com um L. Por exemplo, a região líder padrão de nam8 está em Los Angeles(us-west2). As instruções a seguir explicam como defini-la como Oregon(us-west1).

Console

  1. Acesse a página Instâncias no Google Cloud console.

    Instâncias

  2. Selecione a instância com partições de instância criadas pelo usuário.

  3. Selecione o banco de dados que você quer particionar.

  4. No menu de navegação, clique em Spanner Studio.

  5. Na página Spanner Studio, clique em Nova guia ou use a guia do editor vazia.

  6. Insira a instrução DDL CREATE PLACEMENT (GoogleSQL, PostgreSQL) .

    Por exemplo, execute o comando a seguir para criar uma tabela de posicionamento nam8placement na partição de instância nam8-partition com o local líder padrão definido como us-west1:

    GoogleSQL

    CREATE PLACEMENT `nam8placement`
      OPTIONS (instance_partition="nam8-partition", default_leader="us-west1");
    

    PostgreSQL

    CREATE PLACEMENT nam8placement WITH (instance_partition='nam8-partition', default_leader='us-west1');
    

    Opcional: também é possível usar o painel Object Explorer para visualizar, pesquisar e interagir com os objetos de posicionamento. Para mais informações, consulte Explorar seus dados.

  7. Clique em Executar.

gcloud

Para criar um posicionamento com o comando da CLI gcloud, use gcloud spanner databases ddl update.

Por exemplo, crie uma tabela de posicionamento nam8placement na partição de instância nam8-partition com o local líder padrão definido como us-west1:

GoogleSQL

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="CREATE PLACEMENT nam8placement \
     OPTIONS (instance_partition='nam8-partition', default_leader='us-west1')"

PostgreSQL

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="CREATE PLACEMENT nam8placement WITH (instance_partition='nam8-partition', default_leader='us-west1')"

Remover um posicionamento de dados

Antes de remover um posicionamento, é necessário remover todos os dados de linha dele. Depois de fazer isso, use o Google Cloud console ou a CLI gcloud para remover o posicionamento.

Console

  1. No menu de navegação, clique em Spanner Studio.
  2. Na página Spanner Studio, clique em Nova guia ou use a guia do editor vazia.
  3. Insira a instrução DDL DROP PLACEMENT(GoogleSQL, PostgreSQL).

    Por exemplo, execute o comando a seguir para remover a tabela de posicionamento europeplacement:

    GoogleSQL

    DROP PLACEMENT europeplacement;
    

    PostgreSQL

    DROP PLACEMENT europeplacement;
    

gcloud

Para remover um posicionamento com o comando da CLI gcloud, use gcloud spanner databases ddl update.

Por exemplo, remova o posicionamento europeplacement:

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="DROP PLACEMENT europeplacement"

Erros de remoção de posicionamento

Se o posicionamento estiver em uso, a operação DROP PLACEMENT vai falhar com uma mensagem de erro como: "Statement failed: Placement PLACEMENT_NAME cannot be dropped because it is in use by placement table PLACEMENT_TABLE_NAME.". Se você encontrar esse erro, faça o seguinte:

  1. Modifique o aplicativo para interromper a inserção ou atualização de linhas com o posicionamento que você quer remover.
  2. Siga uma destas instruções:

    • Mova as linhas de posicionamento atuais que usam o posicionamento que você quer excluir para um posicionamento diferente com uma instrução DML particionada como a seguinte:

      UPDATE PLACEMENT_TABLE_NAME SET LOCATION = NEW_PLACEMENT_NAME
      WHERE LOCATION = ORIGINAL_PLACEMENT_NAME;
      
    • Exclua as linhas de posicionamento com uma instrução DML particionada como a seguinte:

      DELETE FROM PLACEMENT_TABLE_NAME
      WHERE LOCATION = ORIGINAL_PLACEMENT_NAME;
      

      As instruções DML específicas do posicionamento anterior só funcionam com DML particionada. Elas vão falhar como instruções DML normais. Saiba mais em Limitações. Também é possível usar a API Mutation para mover ou remover linhas de posicionamento.

Cancelar uma operação DROP PLACEMENT

É possível cancelar uma operação DROP PLACEMENT a qualquer momento antes que a operação de longa duração exclua completamente o posicionamento do esquema do banco de dados. Para detalhes sobre como receber o ID da operação de longa duração para verificar o status ou cancelar a operação, consulte Gerenciar e observar operações de longa duração.

Criar uma tabela com uma chave de posicionamento

Console

  1. No menu de navegação, clique em Spanner Studio.
  2. Na página Spanner Studio, clique em Nova guia ou use a guia do editor vazia.
  3. Insira a instrução DDL CREATE TABLE (GoogleSQL, PostgreSQL).

    Por exemplo, é possível criar uma tabela Singers que usa uma chave de posicionamento para particionar dados de cantores:

    GoogleSQL

    CREATE TABLE Singers (
      SingerId INT64 NOT NULL,
      SingerName STRING(MAX) NOT NULL,
      ...
      Location STRING(MAX) NOT NULL PLACEMENT KEY
    ) PRIMARY KEY (SingerId);
    

    PostgreSQL

    CREATE TABLE Singers (
      SingerId bigint PRIMARY KEY,
      SingerName varchar(1024),
      ...
      Location varchar(1024) NOT NULL PLACEMENT KEY
    );
    

gcloud

Para criar uma tabela, use gcloud spanner databases ddl update.

Por exemplo, é possível criar uma tabela Singers que usa uma chave de posicionamento para particionar dados de cantores:

GoogleSQL

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="CREATE TABLE Singers ( SingerId INT64 NOT NULL, SingerName STRING(MAX) NOT NULL, Location STRING(MAX) NOT NULL PLACEMENT KEY ) PRIMARY KEY (SingerId);"

PostgreSQL

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="CREATE TABLE Singers ( SingerId bigint PRIMARY KEY, SingerName varchar(1024), Location varchar(1024) NOT NULL PLACEMENT KEY );"

Editar uma tabela com uma chave de posicionamento

Não é possível remover uma chave de posicionamento de uma tabela. Também não é possível adicionar uma chave de posicionamento a uma tabela depois que ela for criada. No entanto, é possível usar a ALTER TABLE (GoogleSQL, PostgreSQL) instrução DDL para mudar outros campos em tabela, por exemplo, adicionando e removendo colunas de chave não posicionadas.

Excluir uma tabela com uma chave de posicionamento

Antes de excluir uma tabela com uma chave de posicionamento, é necessário:

  1. Excluir todas as linhas na tabela de posicionamento.
  2. Aguardar a passagem do version_retention_period para o banco de dados. Para mais informações, consulte Recuperação pontual. Em seguida, siga estas etapas:

Console

  1. No menu de navegação, clique em Spanner Studio.
  2. Na página Spanner Studio, clique em Nova guia ou use a guia do editor vazia.
  3. Insira a instrução DDL DROP TABLE (GoogleSQL, PostgreSQL).

    Por exemplo, remova a tabela Singers:

    DROP TABLE Singers;
    

gcloud

Para remover uma tabela, use gcloud spanner databases ddl update.

Por exemplo, remova a tabela Singers:

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="DROP TABLE Singers"

Inserir uma linha em uma tabela de posicionamento

Console

  1. No menu de navegação, clique em Spanner Studio.
  2. Na página Spanner Studio, clique em Nova guia ou use a guia do editor vazia.
  3. Insira a instrução DDL INSERT INTO (GoogleSQL, PostgreSQL).

    Por exemplo, adicione um cantor, Marc Richards, à tabela Singers e particione-o em europeplacement:

    INSERT INTO Singers(SingerId, SingerName, Location)
    VALUES (1, 'Marc Richards', 'europeplacement')
    

gcloud

Para gravar dados em uma tabela, use gcloud spanner rows insert.

Por exemplo, adicione um cantor, Marc Richards, à tabela Singers e particione-o em europeplacement:

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

Atualizar uma linha em uma tabela de posicionamento

Console

  1. No menu de navegação, clique em Spanner Studio.
  2. Na página Spanner Studio, clique em Nova guia ou use a guia do editor vazia.
  3. Use DML ou mutações para atualizar dados em uma tabela de posicionamento.

    Por exemplo, atualize o nome de singerid=1 na tabela Singers para Catalina Smith:

    UPDATE Singers s
    SET s.name='Catalina Smith'
    WHERE s.id=1;
    

gcloud

Para atualizar dados em uma tabela de posicionamento, use gcloud spanner rows update.

Por exemplo, atualize o nome de singerid=1 na tabela Singers para Catalina Smith:

gcloud spanner rows update --table=Singers --database=example-db \
  --instance=test-instance --data=SingerId=1,SingerName='Catalina Smith'

Mover uma linha em uma tabela de posicionamento

Console

  1. Crie uma nova partição de instância e um posicionamento, se ainda não tiver feito isso.
  2. No menu de navegação, clique em Spanner Studio.
  3. Na página Spanner Studio, clique em Nova guia ou use a guia do editor vazia.
  4. Use DML ou mutações para mover dados para a nova partição de instância.

    Por exemplo, mova singerid=1 na tabela Singers para asiaplacement:

    UPDATE Singers s
    SET s.location='asiaplacement'
    WHERE s.id=1;
    

gcloud

Depois de criar a partição de instância e o posicionamento para onde você quer mover seus dados, use gcloud spanner rows update.

Por exemplo, mova singerid=1 na tabela Singers para asiaplacement:

gcloud spanner rows update --table=Singers --database=example-db \
  --instance=test-instance --data=SingerId=1,Location='asiaplacement'

Excluir uma linha em uma tabela de posicionamento

Console

  1. No menu de navegação, clique em Spanner Studio.
  2. Na página Spanner Studio, clique em Nova guia ou use a guia do editor vazia.
  3. Use DML ou mutações para excluir dados.

    Por exemplo, exclua singerid=1 na tabela Singers:

    DELETE FROM Singers s
    WHERE s.id=1;
    

gcloud

Para excluir dados, use gcloud spanner rows delete.

Por exemplo, exclua singerid=1 na tabela Singers:

gcloud spanner rows delete --table=Singers --database=example-db \
  --instance=test-instance --keys=1

Consultar dados em uma tabela de posicionamento

Console

  1. No menu de navegação, clique em Spanner Studio.
  2. Na página Spanner Studio, clique em Nova guia ou use a guia do editor vazia.
  3. Execute a consulta.

    Por exemplo, consulte a tabela Singers:

    SELECT * FROM Singers s WHERE s.SingerId=1;
    

gcloud

Para consultar dados, use gcloud spanner databases execute-sql.

Por exemplo, consulte a tabela Singers:

gcloud spanner databases execute-sql example-db \
  --instance=test-instance \
  --sql='SELECT * FROM Singers s WHERE s.SingerId=1'

A seguir