Créer et gérer des points de fractionnement

Cette page explique comment créer et gérer des points de division dans votre base de données. Vous pouvez créer des points de division pour diviser au préalable votre base de données afin de vous préparer à une augmentation anticipée du trafic. Pour en savoir plus sur la pré-division, consultez Présentation de la pré-division.

Avant de commencer

Créer des points de fractionnement

Vous pouvez créer des points de division à l'aide de la gcloud CLI ou des API REST.

gcloud

Si vous souhaitez créer des points de division à l'aide de la gcloud CLI, vous devez créer un fichier contenant toutes les divisions et fournir le chemin d'accès dans la commande gcloud CLI. Le fichier ne doit pas dépasser la limite de l'API de 100 points par requête API. Pour en savoir plus, consultez la page Quotas et limites.

Le fichier doit utiliser le format suivant pour spécifier les points de division :

  ObjectType ObjectName (SplitValue1, SplitValue2, ...)
  ObjectType ObjectName (IndexSplitValue1, ...) TableKey (TableSplitValue1, ...)

Remplacez les variables suivantes lors de la création du fichier :

  • ObjectType : type d'objet dans lequel vous souhaitez ajouter des divisions. Les valeurs valides sont TABLE et INDEX.
  • ObjectName : nom de la table ou de l'index de la base de données.
  • SplitValue1..N : valeurs de clé du point de division où vous souhaitez introduire les divisions.
  • IndexSplitValue1..N : valeurs de clé d'index pour un point de division d'index.
  • TableSplitValue1..N : valeurs de clé de table pour un point de division d'index.

Utilisez les règles suivantes lorsque vous créez les valeurs de point de partage dans le fichier :

  • Les valeurs de chaîne doivent être placées entre guillemets simples. Par exemple : 'splitKeyPart'
  • Les valeurs booléennes doivent être true ou false.
  • Les valeurs de type de données Spanner INT64 et NUMERIC doivent être placées entre guillemets simples. Par exemple, '123' ou '99.99'.
  • Toutes les autres valeurs numériques doivent être écrites sans guillemets simples. Par exemple, 1.287.
  • Les valeurs de code temporel doivent être fournies au format '2020-06-18T17:24:53Z' entre guillemets simples.
  • Les valeurs de fractionnement doivent être entourées de parenthèses.
  • L'ordre des valeurs des clés de division doit être identique à celui de la clé primaire.
  • Si la valeur de fractionnement doit comporter une virgule, vous devez l'échapper à l'aide d'un caractère "\".
  • Pour diviser des index, vous pouvez fournir la clé d'index ou l'index entier et la clé de table complète.
  • Vous devez toujours utiliser la clé complète lorsque vous spécifiez le point de division.

Voici un exemple de fichier qui montre comment les points de division sont spécifiés :

  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')

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • SPLITS_FILE : chemin d'accès au fichier de fractionnement.
  • INSTANCE_ID : ID de l'instance.
  • DATABASE_ID : ID de la base de données.
  • EXPIRATION_DATE : (facultatif) date d'expiration des points de répartition. Accepte un code temporel au format '2020-06-18T17:24:53Z'.
  • INITIATOR (facultatif) : initiateur des points de division.

Exécutez la commande suivante :

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

Vous pouvez utiliser la méthode projects.instances.databases.addSplitPoints pour créer des points de division.

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : ID du projet.
  • INSTANCE_ID : ID de l'instance.
  • DATABASE_ID : ID de la base de données.

Méthode HTTP et URL :

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

Corps JSON de la requête :

{
  "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
            ]
          }
        }
      ]
    }
  ]
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir un code d'état indiquant le succès de l'opération (2xx), ainsi qu'une réponse vide.

Bibliothèques clientes

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

Scénarios d'erreur possibles

Les scénarios suivants peuvent entraîner une erreur lors de la création de points de division :

  • Le nom de la table est incorrect dans l'entrée de la division au niveau de l'index.
  • Le point de division au niveau de la table comporte plusieurs clés.
  • Le point de division au niveau de l'index comporte plus de deux clés.
  • Les points de division sont définis sur des tables ou des index qui ne sont pas définis dans le schéma de la base de données.
  • La requête contient des points de division en double.

Pour plus d'informations sur les quotas et les limites, consultez la section Quotas et limites.

Afficher les points de partage

Vous pouvez afficher tous les points de division créés dans votre base de données à l'aide de la consoleGoogle Cloud ou de la gcloud CLI :

Console

Pour obtenir le nombre de points de division en interrogeant la vue SPANNER_SYS.USER_SPLIT_POINTS dans la console Google Cloud , procédez comme suit :

  1. Ouvrez la page "Instances Spanner".

    Accéder aux instances Spanner

  2. Sélectionnez les noms de l'instance Spanner et de la base de données que vous souhaitez interroger.

  3. Cliquez sur Spanner Studio dans le panneau de navigation de gauche.

  4. Saisissez la requête suivante dans le champ de texte :

        SELECT * FROM SPANNER_SYS.USER_SPLIT_POINTS
    
  5. Cliquez sur Exécuter la requête.

Un résultat semblable à celui-ci s'affiche :

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 Index : T_IDX sur T, clé d'index : (10), clé de table principale : (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>) 2025-03-08T07:33:23.861682Z
T T_IDX CloudAddSplitPointsAPI Index : T_IDX sur T, clé d'index : (9091), clé de table principale : (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a) 2025-03-08T07:35:25.990007Z

gcloud

Exécutez la commande gcloud CLI suivante pour afficher les points de division dans votre base de données :

  gcloud spanner databases splits list DATABASE_ID \
  --instance INSTANCE_ID

Remplacez les variables suivantes lorsque vous exécutez cette commande :

  • INSTANCE_ID : ID de l'instance Spanner.
  • DATABASE_ID : ID de la base de données Spanner.

Une réponse semblable à la suivante s'affiche :

  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

Faire expirer un point de répartition

Vous pouvez définir un délai d'expiration pour chaque point de répartition que vous créez. Pour en savoir plus, consultez Expiration du point de division. Vous pouvez faire expirer des points de répartition à l'aide de la gcloud CLI ou des API REST.

gcloud

Si vous souhaitez faire expirer des points de répartition à l'aide de la gcloud CLI, vous devez créer un fichier contenant toutes les répartitions que vous souhaitez faire expirer et fournir son chemin d'accès à l'aide du paramètre splits-file dans la commande gcloud CLI. Le fichier ne doit pas dépasser la limite de l'API de 100 points par requête API. Pour en savoir plus, consultez la page Quotas et limites.

Le fichier doit utiliser le format suivant pour spécifier les points de division :

  ObjectType ObjectName (SplitValue1, SplitValue2, ...)
  ObjectType ObjectName (IndexSplitValue1, ...) TableKey (TableSplitValue1, ...)

Remplacez les variables suivantes lors de la création du fichier :

  • ObjectType : type d'objet de la répartition que vous souhaitez faire expirer. Les valeurs valides sont TABLE et INDEX.
  • ObjectName : nom de la table ou de l'index de la base de données.
  • SplitValue1..N : valeurs de clé du point de division que vous souhaitez faire expirer.
  • IndexSplitValue1..N : valeurs de clé d'index pour un point de division d'index.
  • TableSplitValue1..N : valeurs de clé de table pour un point de division d'index.

Utilisez les règles suivantes lorsque vous créez les valeurs de point de partage dans le fichier :

  • Les valeurs de chaîne doivent être placées entre guillemets simples. Par exemple : 'splitKeyPart'
  • Les valeurs booléennes peuvent être true ou false.
  • Les valeurs de type de données Spanner INT64 et NUMERIC doivent être placées entre guillemets simples. Par exemple, '123' ou '99.99'.
  • Toutes les autres valeurs numériques doivent être écrites sans guillemets simples. Par exemple, 1.287.
  • Les valeurs de code temporel doivent être fournies au format '2020-06-18T17:24:53Z' entre guillemets simples.
  • Les valeurs de fractionnement doivent être entourées de parenthèses.
  • L'ordre des valeurs des clés de division doit être identique à celui de la clé primaire.
  • Si la valeur de fractionnement doit comporter une virgule, vous devez l'échapper à l'aide d'un caractère "\".
  • Pour diviser des index, vous pouvez fournir la clé d'index ou l'index entier et la clé de table complète.
  • Vous devez toujours utiliser la clé complète lorsque vous spécifiez le point de division.

Voici un exemple de fichier qui montre comment les points de division sont spécifiés :

  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')

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • SPLITS_FILE : chemin d'accès au fichier de fractionnement.
  • INSTANCE_ID : ID de l'instance.
  • DATABASE_ID : ID de la base de données.
  • EXPIRATION_DATE : (facultatif) date d'expiration des points de répartition. Accepte un code temporel au format '2020-06-18T17:24:53Z'.
  • INITIATOR (facultatif) : initiateur des points de division.

Exécutez la commande suivante :

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

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID du projet.
  • INSTANCE_ID : ID de l'instance.
  • DATABASE_ID : ID de la base de données.

Méthode HTTP et URL :

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

Corps JSON de la requête :

{
  "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
            ]
          }
        }
      ]
    }
  ]
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir un code d'état indiquant le succès de l'opération (2xx), ainsi qu'une réponse vide.

Étape suivante