Criar e gerenciar pontos de divisão

Esta página descreve como criar e gerenciar pontos de divisão no seu banco de dados. Você pode criar pontos de divisão para pré-dividir seu banco de dados e se preparar para um aumento previsto no tráfego. Para mais informações sobre a divisão antecipada, consulte Visão geral da divisão antecipada.

Antes de começar

Criar pontos de divisão

É possível criar pontos de divisão usando a Google Cloud CLI ou as APIs REST.

gcloud

Se você quiser criar pontos de divisão usando a Google Cloud CLI, crie um arquivo que contenha todas as divisões e forneça o caminho no comando da CLI gcloud. O arquivo não pode exceder o limite de 100 pontos por solicitação de API. Para mais informações, consulte Cotas e limites.

O arquivo precisa usar o seguinte formato para especificar os pontos de divisão:

  ObjectType ObjectName (SplitValue)
  ObjectType ObjectName (SplitValue)
  ObjectType ObjectName (SplitValue)

Substitua as seguintes variáveis ao criar o arquivo:

  • ObjectType: o tipo de objeto em que você quer adicionar divisões. Os valores válidos são TABLE e INDEX.
  • ObjectName: o nome da tabela ou do índice do banco de dados.
  • SplitValue: o pontuação de divisão em que você quer introduzir as divisões.

Use as seguintes regras ao criar os valores do ponto de divisão no arquivo:

  • Os valores de string precisam estar entre aspas simples. Por exemplo, 'splitKeyPart'.
  • Os valores booleanos precisam ser true ou false.
  • Os valores de tipo de dados INT64 e NUMERIC do Spanner precisam estar entre aspas simples. Por exemplo, '123' ou '99.99'.
  • Todos os outros valores numéricos precisam ser escritos sem aspas simples. Por exemplo, 1.287.
  • Os valores de carimbo de data/hora precisam ser fornecidos no formato '2020-06-18T17:24:53Z' entre aspas simples.
  • Os valores divididos precisam estar entre parênteses.
  • A ordem dos valores das chaves divididas precisa ser igual à ordem da chave primária.
  • Se o valor da divisão precisar ter uma vírgula, use um caractere `\` para escapar dela.
  • Para dividir índices, você pode fornecer a chave de índice ou o índice inteiro e a chave de tabela completa.
  • É preciso sempre usar a chave completa ao especificar o ponto de divisão.

Confira a seguir um arquivo de exemplo que mostra como os pontos de divisão são especificados:

  TABLE Singers ('c32ca57a-786c-2268-09d4-95182a9930be')
  TABLE Singers ('bb98c7e2-8240-b780-346d-c5d63886594a')
  INDEX Order ('5b8bac71-0cb2-95e9-e1b0-89a027525460')
  TABLE Payment ('6cf41f21-2d77-318f-c504-816f0068db8b')
  INDEX Indx_A (2152120141932780000)
  TABLE TableD  (0,'7ef9d̦b22-d0e5-6041-8937-4bc6a7ef9db2')
  INDEX IndexXYZ ('8762203435012030000',NULL,NULL)
  INDEX IndexABC  (0, '2020-06-18T17:24:53Z', '2020-06-18T17:24:53Z') TableKey
  (123,'ab\,c')

Antes de usar os dados do comando abaixo, faça estas substituições:

  • SPLITS_FILE: o caminho para o arquivo de divisões.
  • INSTANCE_ID: o ID da instância
  • DATABASE_ID: o ID do banco de dados.
  • EXPIRATION_DATE: (opcional) a data de validade dos pontos de divisão. Aceita um carimbo de data/hora no formato '2020-06-18T17:24:53Z'.
  • INITIATOR: (opcional) o iniciador dos pontos de divisão.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud spanner databases splits add DATABASE_ID \
--splits-file=SPLITS_FILE \
--instance=INSTANCE_ID\
--split-expiration-date=EXPIRATION_DATE\
--initiator=INITIATOR\

Windows (PowerShell)

gcloud spanner databases splits add DATABASE_ID `
--splits-file=SPLITS_FILE `
--instance=INSTANCE_ID`
--split-expiration-date=EXPIRATION_DATE`
--initiator=INITIATOR`

Windows (cmd.exe)

gcloud spanner databases splits add DATABASE_ID ^
--splits-file=SPLITS_FILE ^
--instance=INSTANCE_ID^
--split-expiration-date=EXPIRATION_DATE^
--initiator=INITIATOR^

REST v1

Use o método projects.instances.databases.addSplitPoints para criar pontos de divisão.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto.
  • INSTANCE_ID: o ID da instância
  • DATABASE_ID: o ID do banco de dados.

Método HTTP e URL:

POST https://spanner.googleapis.com/v1/projects//instances//databases/:addSplitPoints

Corpo JSON da solicitação:

{
  "split_points": [
    {
      "table": "T1",
      "index": "T1_IDX",
      "expire_time": "2023-04-22T10:00:20.021Z",
      "keys": [
        {
          "key_parts": {
            "values": [
              3
            ]
          }
        },
        {
          "key_parts": {
            "values": [
              10
            ]
          }
        }
      ]
    },
    {
      "table": "T2",
      "expire_time": "2023-04-22T10:00:20.021Z",
      "keys": [
        {
          "key_parts": {
            "values": [
              50
            ]
          }
        }
      ]
    }
  ]
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá um código de status bem-sucedido (2xx) e uma resposta vazia.

Bibliotecas de cliente

Go


import (
	"context"
	"fmt"
	"io"
	"time"

	database "cloud.google.com/go/spanner/admin/database/apiv1"
	"cloud.google.com/go/spanner/admin/database/apiv1/databasepb"
	adminpb "cloud.google.com/go/spanner/admin/database/apiv1/databasepb"
	"google.golang.org/protobuf/types/known/structpb"
	"google.golang.org/protobuf/types/known/timestamppb"
)

// Adds split points to table and index
// AddSplitPoins API - https://pkg.go.dev/cloud.google.com/go/spanner/admin/database/apiv1#DatabaseAdminClient.AddSplitPoints
func addSplitpoints(w io.Writer, dbName string) error {
	ctx := context.Background()

	dbAdminClient, err := database.NewDatabaseAdminClient(ctx)
	if err != nil {
		return err
	}
	defer dbAdminClient.Close()

	// Database is assumed to exist - https://cloud.google.com/spanner/docs/getting-started/go#create_a_database
	// Singers table is assumed to be present
	ddl := []string{
		"CREATE INDEX IF NOT EXISTS SingersByFirstLastName ON Singers(FirstName, LastName)",
	}
	op, err := dbAdminClient.UpdateDatabaseDdl(ctx, &adminpb.UpdateDatabaseDdlRequest{
		Database:   dbName,
		Statements: ddl,
	})

	if err != nil {
		return fmt.Errorf("addSplitPoints: waiting for UpdateDatabaseDdlRequest failed: %w", err)
	}

	// Wait for the UpdateDatabaseDdl operation to finish.
	if err := op.Wait(ctx); err != nil {
		return fmt.Errorf("addSplitPoints: waiting for UpdateDatabaseDdlRequest to finish failed: %w", err)
	}
	fmt.Fprintf(w, "Added indexes for Split testing\n")

	splitTableKey := databasepb.SplitPoints_Key{
		KeyParts: &structpb.ListValue{
			Values: []*structpb.Value{
				structpb.NewStringValue("42"),
			},
		},
	}

	splitForTable := databasepb.SplitPoints{
		Table: "Singers",
		Keys:  []*databasepb.SplitPoints_Key{&splitTableKey},
	}

	splitIndexKey := databasepb.SplitPoints_Key{
		KeyParts: &structpb.ListValue{
			Values: []*structpb.Value{
				structpb.NewStringValue("John"),
				structpb.NewStringValue("Doe"),
			},
		},
	}

	splitForindex := databasepb.SplitPoints{
		Index: "SingersByFirstLastName",
		Keys:  []*databasepb.SplitPoints_Key{&splitIndexKey},
	}

	splitIndexKeyWithTableKeyPart := databasepb.SplitPoints_Key{
		KeyParts: &structpb.ListValue{
			Values: []*structpb.Value{
				structpb.NewStringValue("38"),
			},
		},
	}

	splitIndexKeyWithIndexKeyPart := databasepb.SplitPoints_Key{
		KeyParts: &structpb.ListValue{
			Values: []*structpb.Value{
				structpb.NewStringValue("Jane"),
				structpb.NewStringValue("Doe"),
			},
		},
	}

	// the index key part is first and table keypart is second in the split definition
	splitForindexWithTableKey := databasepb.SplitPoints{
		Index: "SingersByFirstLastName",
		Keys:  []*databasepb.SplitPoints_Key{&splitIndexKeyWithIndexKeyPart, &splitIndexKeyWithTableKeyPart},
	}

	splitTableKeyWithExpire := databasepb.SplitPoints_Key{
		KeyParts: &structpb.ListValue{
			Values: []*structpb.Value{
				structpb.NewStringValue("30"),
			},
		},
	}

	splitForTableWithExpire := databasepb.SplitPoints{
		Table: "Singers",
		Keys:  []*databasepb.SplitPoints_Key{&splitTableKeyWithExpire},
		// A timestamp in the past means immediate expiration.
		// The maximum value can be 30 days in the future.
		// Defaults to 10 days in the future if not specified.
		//
		// Setting the expiration time to next day
		ExpireTime: timestamppb.New(time.Now().Add(24 * time.Hour)),
	}

	// Add split points to table and index
	req := databasepb.AddSplitPointsRequest{
		Database:    dbName,
		SplitPoints: []*databasepb.SplitPoints{&splitForTable, &splitForindex, &splitForindexWithTableKey, &splitForTableWithExpire},
	}

	res, err := dbAdminClient.AddSplitPoints(ctx, &req)
	if err != nil {
		return fmt.Errorf("addSplitpoints: failed to add split points: %w", err)
	}

	fmt.Fprintf(w, "Added split points %s", res)
	return nil
}

Java


import com.google.cloud.spanner.Spanner;
import com.google.cloud.spanner.SpannerException;
import com.google.cloud.spanner.SpannerOptions;
import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient;
import com.google.protobuf.ListValue;
import com.google.protobuf.Value;
import com.google.spanner.admin.database.v1.DatabaseName;
import com.google.spanner.admin.database.v1.SplitPoints;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class DatabaseAddSplitPointsSample {

  /***
   * Assume DDL for the underlying database:
   * <pre>{@code
   * CREATE TABLE Singers (
   * SingerId INT64 NOT NULL,
   * FirstName STRING(1024),
   * LastName STRING(1024),
   *  SingerInfo BYTES(MAX),
   * ) PRIMARY KEY(SingerId);
   *
   *
   * CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName);
   * }</pre>
   */

  static void addSplitPoints() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "my-project";
    String instanceId = "my-instance";
    String databaseId = "my-database";
    addSplitPoints(projectId, instanceId, databaseId);
  }

  static void addSplitPoints(String projectId, String instanceId, String databaseId)
      throws IOException {
    try (Spanner spanner =
            SpannerOptions.newBuilder().setProjectId(projectId).build().getService();
        DatabaseAdminClient databaseAdminClient = spanner.createDatabaseAdminClient()) {
      List<com.google.spanner.admin.database.v1.SplitPoints> splitPoints = new ArrayList<>();

      // table key
      com.google.spanner.admin.database.v1.SplitPoints splitPointForTable =
          SplitPoints.newBuilder()
              .setTable("Singers")
              .addKeys(
                  com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder()
                      .setKeyParts(
                          ListValue.newBuilder()
                              .addValues(Value.newBuilder().setStringValue("42").build())
                              .build()))
              .build();

      // index key without table key part
      com.google.spanner.admin.database.v1.SplitPoints splitPointForIndex =
          SplitPoints.newBuilder()
              .setIndex("SingersByFirstLastName")
              .addKeys(
                  com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder()
                      .setKeyParts(
                          ListValue.newBuilder()
                              .addValues(Value.newBuilder().setStringValue("John").build())
                              .addValues(Value.newBuilder().setStringValue("Doe").build())
                              .build()))
              .build();

      // index key with table key part, first key is the index key and second is the table key
      com.google.spanner.admin.database.v1.SplitPoints splitPointForIndexWitTableKey =
          SplitPoints.newBuilder()
              .setIndex("SingersByFirstLastName")
              .addKeys(
                  com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder()
                      .setKeyParts(
                          ListValue.newBuilder()
                              .addValues(Value.newBuilder().setStringValue("Jane").build())
                              .addValues(Value.newBuilder().setStringValue("Doe").build())
                              .build()))
              .addKeys(
                  com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder()
                      .setKeyParts(
                          ListValue.newBuilder()
                              .addValues(Value.newBuilder().setStringValue("38").build())
                              .build()))
              .build();

      splitPoints.add(splitPointForTable);
      splitPoints.add(splitPointForIndex);
      splitPoints.add(splitPointForIndexWitTableKey);
      databaseAdminClient.addSplitPoints(
          DatabaseName.of(projectId, instanceId, databaseId), splitPoints);

    } catch (Exception e) {
      // If the operation failed during execution, expose the cause.
      throw (SpannerException) e.getCause();
    }
  }
}

Node.js

// Import the Google Cloud client library for Spanner.
const {Spanner} = require('@google-cloud/spanner');

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const projectId = 'my-project-id';
// const instanceId = 'my-instance-id';
// const databaseId = 'my-database-id';

// Create a Spanner database admin client.
const spanner = new Spanner({projectId});
const databaseAdminClient = spanner.getDatabaseAdminClient();

try {
  // Add split points to table and index
  // first is a table level split that takes table primary key value
  // second is index level split with index key parts
  // third is index level split having index key part and table key part
  // Assume the following table and index structure
  // CREATE TABLE Singers (
  // SingerId INT64 NOT NULL,
  // FirstName STRING(1024),
  // LastName STRING(1024),
  // SingerInfo BYTES(MAX),
  // ) PRIMARY KEY(SingerId);
  //
  // CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName);
  const request = [
    'CREATE INDEX IF NOT EXISTS SingersByFirstLastName ON Singers(FirstName, LastName)',
  ];

  const [operation] = await databaseAdminClient.updateDatabaseDdl({
    database: databaseAdminClient.databasePath(
      projectId,
      instanceId,
      databaseId,
    ),
    statements: request,
  });

  console.log('Waiting for operation to complete...');
  await operation.promise();

  console.log('Added the SingersByFirstLastName index.');

  databaseAdminClient.addSplitPoints({
    database: databaseAdminClient.databasePath(
      projectId,
      instanceId,
      databaseId,
    ),
    splitPoints: [
      {
        table: 'Singers',
        keys: [{keyParts: {values: [{stringValue: '42'}]}}],
      },
      {
        index: 'SingersByFirstLastName',
        keys: [
          {
            keyParts: {
              values: [{stringValue: 'John'}, {stringValue: 'Doe'}],
            },
          },
        ],
      },
      {
        index: 'SingersByFirstLastName',
        keys: [
          {
            keyParts: {
              values: [{stringValue: 'Jane'}, {stringValue: 'Doe'}],
            },
          },
          {keyParts: {values: [{stringValue: '38'}]}},
        ],
      },
    ],
  });
  console.log('Added Split Points');
} catch (err) {
  console.error('ERROR:', err);
}

Python

def add_split_points(instance_id, database_id):
    """Adds split points to table and index."""

    from google.cloud.spanner_admin_database_v1.types import spanner_database_admin

    spanner_client = spanner.Client()
    database_admin_api = spanner_client.database_admin_api

    request = spanner_database_admin.UpdateDatabaseDdlRequest(
        database=database_admin_api.database_path(
            spanner_client.project, instance_id, database_id
        ),
        statements=["CREATE INDEX IF NOT EXISTS SingersByFirstLastName ON Singers(FirstName, LastName)"],
    )

    operation = database_admin_api.update_database_ddl(request)

    print("Waiting for operation to complete...")
    operation.result(OPERATION_TIMEOUT_SECONDS)

    print("Added the SingersByFirstLastName index.")

    addSplitPointRequest = spanner_database_admin.AddSplitPointsRequest(
        database=database_admin_api.database_path(
            spanner_client.project, instance_id, database_id
        ),
        # Table split
        # Index split without table key part
        # Index split with table key part: first key is the index key and second the table key
        split_points=[
            spanner_database_admin.SplitPoints(
                table="Singers",
                keys=[
                    spanner_database_admin.SplitPoints.Key(
                        key_parts=struct_pb2.ListValue(
                            values=[struct_pb2.Value(string_value="42")]
                        )
                    )
                ],
            ),
            spanner_database_admin.SplitPoints(
                index="SingersByFirstLastName",
                keys=[
                    spanner_database_admin.SplitPoints.Key(
                        key_parts=struct_pb2.ListValue(
                            values=[
                                struct_pb2.Value(string_value="John"),
                                struct_pb2.Value(string_value="Doe"),
                            ]
                        )
                    )
                ],
            ),
            spanner_database_admin.SplitPoints(
                index="SingersByFirstLastName",
                keys=[
                    spanner_database_admin.SplitPoints.Key(
                        key_parts=struct_pb2.ListValue(
                            values=[
                                struct_pb2.Value(string_value="Jane"),
                                struct_pb2.Value(string_value="Doe"),
                            ]
                        )
                    ),
                    spanner_database_admin.SplitPoints.Key(
                        key_parts=struct_pb2.ListValue(
                            values=[struct_pb2.Value(string_value="38")]
                        )
                    ),

                ],
            ),
        ],
    )

    operation = database_admin_api.add_split_points(addSplitPointRequest)

    print("Added split points.")

Possíveis cenários de erro

Os seguintes cenários podem resultar em um erro ao criar pontos de divisão:

  • A divisão no nível do índice tem um nome de tabela incorreto na entrada.
  • O ponto de divisão no nível da tabela tem mais de uma chave.
  • O ponto de divisão no nível do índice tem mais de duas chaves.
  • Os pontos de divisão são definidos em tabelas ou índices que não estão definidos no esquema do banco de dados.
  • A solicitação contém pontos de divisão duplicados.

Para mais informações sobre o assunto, consulte Cotas e limites.

Conferir pontos de divisão

É possível conferir todos os pontos de divisão criados no seu banco de dados usando o Google Cloud console ou a CLI gcloud:

Console

Para conferir a contagem de pontos de divisão ao consultar a visualização SPANNER_SYS.USER_SPLIT_POINTS no console Google Cloud , faça o seguinte:

  1. Abra a página "Instâncias do Spanner".

    Acessar as instâncias do Spanner

  2. Selecione os nomes da instância do Spanner e do banco de dados que você quer consultar.

  3. Clique em Spanner Studio no painel de navegação à esquerda.

  4. Digite a seguinte consulta no campo de texto:

        SELECT * FROM SPANNER_SYS.USER_SPLIT_POINTS
    
  5. Clique em Executar consulta.

Um resultado semelhante a este vai aparecer:

TABLE_NAME INDEX_NAME INITIATOR SPLIT_KEY EXPIRE_TIME
T CloudAddSplitPointsAPI T(90,153,4,2024-04-30T17:00:00-07:00,1,2024-05-01,a) 2025-03-06T09:58:58.007201Z
T T_IDX CloudAddSplitPointsAPI Índice: T_IDX em T, chave de índice: (10), chave de tabela primária: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>) 2025-03-08T07:33:23.861682Z
T T_IDX CloudAddSplitPointsAPI Índice: T_IDX em T, chave de índice: (9091), chave de tabela primária: (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a) 2025-03-08T07:35:25.990007Z

gcloud

Execute o seguinte comando da CLI gcloud para conferir os pontos de divisão no seu banco de dados:

  gcloud spanner databases splits list DATABASE_ID \
  --instance INSTANCE_ID

Substitua as seguintes variáveis ao executar este comando:

  • INSTANCE_ID: o ID da instância do Spanner.
  • DATABASE_ID: o ID do banco de dados do Spanner.

Uma resposta semelhante a esta vai aparecer:

  TABLE_NAME: T
  INDEX_NAME:
  INITIATOR: CloudAddSplitPointsAPI
  SPLIT_KEY: T(90,153,4,2024-04-30T17:00:00-07:00,1,2024-05-01,a)
  EXPIRE_TIME: 2025-03-06T09:58:58.007201Z

  TABLE_NAME: T
  INDEX_NAME: T_IDX
  INITIATOR: CloudAddSplitPointsAPI
  SPLIT_KEY: Index: T_IDX on T, Index Key: (10), Primary Table Key: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>)
  EXPIRE_TIME: 2025-03-08T07:33:23.861682Z

  TABLE_NAME: T
  INDEX_NAME: T_IDX
  INITIATOR: CloudAddSplitPointsAPI
  SPLIT_KEY: Index: T_IDX on T, Index Key: (9091), Primary Table Key: (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a)
  EXPIRE_TIME: 2025-03-08T07:35:25.990007Z

Como expirar um ponto de divisão

É possível definir um tempo de expiração para cada ponto de divisão criado. Para mais informações, consulte Expiração do ponto de divisão. É possível expirar pontos de divisão usando a Google Cloud CLI ou as APIs REST.

gcloud

Se você quiser expirar pontos de divisão na Google Cloud CLI, crie um arquivo com todas as divisões que quer expirar e forneça o caminho usando o parâmetro splits-file no comando CLI gcloud. O arquivo não pode exceder o limite de 100 pontos por solicitação de API. Para mais informações, consulte Cotas e limites.

O arquivo precisa usar o seguinte formato para especificar os pontos de divisão:

  ObjectType ObjectName (SplitValue)
  ObjectType ObjectName (SplitValue)
  ObjectType ObjectName (SplitValue)

Substitua as seguintes variáveis ao criar o arquivo:

  • ObjectType: o tipo de objeto da divisão que você quer expirar. Os valores válidos são TABLE e INDEX.
  • ObjectName: o nome da tabela ou do índice do banco de dados.
  • SplitValue: o pontuação de divisão que você quer expirar.

Use as seguintes regras ao criar os valores do ponto de divisão no arquivo:

  • Os valores de string precisam estar entre aspas simples. Por exemplo, 'splitKeyPart'.
  • Os valores booleanos podem ser true ou false.
  • Os valores de tipo de dados INT64 e NUMERIC do Spanner precisam estar entre aspas simples. Por exemplo, '123' ou '99.99'.
  • Todos os outros valores numéricos precisam ser escritos sem aspas simples. Por exemplo, 1.287.
  • Os valores de carimbo de data/hora precisam ser fornecidos no formato '2020-06-18T17:24:53Z' entre aspas simples.
  • Os valores divididos precisam estar entre parênteses.
  • A ordem dos valores das chaves divididas precisa ser igual à ordem da chave primária.
  • Se o valor da divisão precisar ter uma vírgula, use um caractere `\` para escapar dela.
  • Para dividir índices, você pode fornecer a chave de índice ou o índice inteiro e a chave de tabela completa.
  • É preciso sempre usar a chave completa ao especificar o ponto de divisão.

Confira a seguir um arquivo de exemplo que mostra como os pontos de divisão são especificados:

  TABLE Singers ('c32ca57a-786c-2268-09d4-95182a9930be')
  TABLE Singers ('bb98c7e2-8240-b780-346d-c5d63886594a')
  INDEX Order ('5b8bac71-0cb2-95e9-e1b0-89a027525460')
  TABLE Payment ('6cf41f21-2d77-318f-c504-816f0068db8b')
  INDEX Indx_A (2152120141932780000)
  TABLE TableD  (0,'7ef9db22-d0e5-6041-8937-4bc6a7ef9db2')
  INDEX IndexXYZ ('8762203435012030000',NULL,NULL)
  INDEX IndexABC  (0, '2020-06-18T17:24:53Z', '2020-06-18T17:24:53Z') TableKey
  (123,'ab\,c')

Antes de usar os dados do comando abaixo, faça estas substituições:

  • SPLITS_FILE: o caminho para o arquivo de divisões.
  • INSTANCE_ID: o ID da instância
  • DATABASE_ID: o ID do banco de dados.
  • EXPIRATION_DATE: (opcional) a data de validade dos pontos de divisão. Aceita um carimbo de data/hora no formato '2020-06-18T17:24:53Z'.
  • INITIATOR: (opcional) o iniciador dos pontos de divisão.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud spanner databases splits add DATABASE_ID \
--splits-file=SPLITS_FILE \
--instance=INSTANCE_ID\
--split-expiration-date=EXPIRATION_DATE\
--initiator=INITIATOR\

Windows (PowerShell)

gcloud spanner databases splits add DATABASE_ID `
--splits-file=SPLITS_FILE `
--instance=INSTANCE_ID`
--split-expiration-date=EXPIRATION_DATE`
--initiator=INITIATOR`

Windows (cmd.exe)

gcloud spanner databases splits add DATABASE_ID ^
--splits-file=SPLITS_FILE ^
--instance=INSTANCE_ID^
--split-expiration-date=EXPIRATION_DATE^
--initiator=INITIATOR^

REST v1

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto.
  • INSTANCE_ID: o ID da instância
  • DATABASE_ID: o ID do banco de dados.

Método HTTP e URL:

POST https://spanner.googleapis.com/v1/projects//instances//databases/:addSplitPoints

Corpo JSON da solicitação:

{
  "split_points": [
    {
      "table": "T1",
      "index": "T1_IDX",
      "expire_time": "2023-04-22T10:00:20.021Z",
      "keys": [
        {
          "key_parts": {
            "values": [
              3
            ]
          }
        },
        {
          "key_parts": {
            "values": [
              10
            ]
          }
        }
      ]
    },
    {
      "table": "T2",
      "expire_time": "2023-04-22T10:00:20.021Z",
      "keys": [
        {
          "key_parts": {
            "values": [
              50
            ]
          }
        }
      ]
    }
  ]
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá um código de status bem-sucedido (2xx) e uma resposta vazia.

A seguir