Split-Punkte erstellen und verwalten

Auf dieser Seite wird beschrieben, wie Sie Aufteilungspunkte in Ihrer Datenbank erstellen und verwalten. Sie können Aufteilungspunkte erstellen, um Ihre Datenbank vorab aufzuteilen und sich so auf einen erwarteten Anstieg des Traffics vorzubereiten. Weitere Informationen zur Vorabaufteilung finden Sie unter Vorabaufteilung – Übersicht.

Hinweis

  • Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Cloud Spanner Database Admin (roles/spanner.databaseAdmin) für Ihre Instanz zuzuweisen, um die Berechtigung zu erhalten, die Sie zum Erstellen und Verwalten von Teilungspunkten benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

    Diese vordefinierte Rolle enthält die Berechtigung spanner.databases.addSplitPoints, die zum Erstellen und Verwalten von Aufteilungspunkten erforderlich ist.

    Sie können diese Berechtigung auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

  • Bei den Beispielen für die Google Cloud CLI auf dieser Seite wird Folgendes vorausgesetzt:

    • Sie haben die gcloud CLI für die Verwendung mit Spanner eingerichtet. Wenn Sie die gcloud CLI noch nicht mit Spanner verwendet haben, lesen Sie den Hilfeartikel Datenbank mit der gcloud CLI erstellen und abfragen.
    • Sie haben die gcloud CLI mit Ihrem Projekt konfiguriert. Beispiel:

      gcloud config set core/project PROJECT_ID
  • Achten Sie darauf, dass Ihre Spanner-Instanz genügend Knoten hat, um den erwarteten Anstieg des Traffics zu bewältigen. Weitere Informationen finden Sie unter Übersicht über die Vorabaufteilung.

Aufteilungspunkte erstellen

Sie können Aufteilungspunkte mit der gcloud CLI oder den REST APIs erstellen.

gcloud

Wenn Sie Splitpunkte mit der gcloud CLI erstellen möchten, müssen Sie eine Datei erstellen, die alle Splits enthält, und den Pfad im gcloud CLI-Befehl angeben. Die Datei darf das API-Limit von 100 Punkten pro API-Anfrage nicht überschreiten. Weitere Informationen finden Sie unter Kontingente und Limits.

Die Datei muss das folgende Format verwenden, um die Aufteilungspunkte anzugeben:

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

Ersetzen Sie beim Erstellen der Datei die folgenden Variablen:

  • ObjectType: der Objekttyp, in dem Sie Aufteilungen hinzufügen möchten. Gültige Werte sind TABLE und INDEX.
  • ObjectName: der Name der Datenbanktabelle oder des Index.
  • SplitValue1..N: die Schlüsselwerte für die Aufteilungspunkte, an denen Sie die Aufteilungen einfügen möchten.
  • IndexSplitValue1..N: die Indexschlüsselwerte für einen Indexaufteilungspunkt.
  • TableSplitValue1..N: Die Tabellenschlüsselwerte für einen Indexaufteilungspunkt.

Beachten Sie beim Erstellen der Aufteilungspunktwerte in der Datei die folgenden Regeln:

  • Stringwerte müssen in einfache Anführungszeichen gesetzt werden. Beispiel: 'splitKeyPart'
  • Boolesche Werte müssen entweder true oder false sein.
  • INT64- und NUMERIC-Spanner-Datentypwerte müssen in einfache Anführungszeichen gesetzt werden. Beispiel: '123' oder '99.99'.
  • Alle anderen Zahlenwerte müssen ohne einfache Anführungszeichen geschrieben werden. Beispiel: 1.287
  • Zeitstempelwerte sollten im Format '2020-06-18T17:24:53Z' in einfachen Anführungszeichen angegeben werden.
  • Die Werte für die Aufteilung müssen in Klammern gesetzt werden.
  • Die Reihenfolge der Werte für die Aufteilungsschlüssel muss mit der Reihenfolge der Primärschlüssel übereinstimmen.
  • Wenn der Aufteilungswert ein Komma enthalten muss, müssen Sie das Komma mit einem Backslash (\) maskieren.
  • Zum Aufteilen von Indexen können Sie entweder den Indexschlüssel oder den gesamten Index und den vollständigen Tabellenschlüssel angeben.
  • Sie müssen immer den vollständigen Schlüssel verwenden, wenn Sie den Aufteilungspunkt angeben.

Im Folgenden finden Sie eine Beispieldatei, die zeigt, wie Aufteilungspunkte angegeben werden:

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

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • SPLITS_FILE: der Pfad zur Aufteilungsdatei.
  • INSTANCE_ID: Instanz-ID.
  • DATABASE_ID: die Datenbank-ID.
  • EXPIRATION_DATE: (optional) das Ablaufdatum der Split Points. Akzeptiert einen Zeitstempel im Format '2020-06-18T17:24:53Z'.
  • INITIATOR: (optional) der Initiator der Aufteilungspunkte.

Führen Sie folgenden Befehl aus:

Linux, macOS oder 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 Version 1

Mit der Methode projects.instances.databases.addSplitPoints können Sie Aufteilungspunkte erstellen.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Projekt-ID.
  • INSTANCE_ID: Instanz-ID.
  • DATABASE_ID: die Datenbank-ID.

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten einen erfolgreichen Statuscode (2xx) und eine leere Antwort als Ausgabe erhalten.

Clientbibliotheken

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

Mögliche Fehlerszenarien

Die folgenden Szenarien können beim Erstellen von Aufteilungspunkten zu einem Fehler führen:

  • Die Aufteilung auf Indexebene enthält einen falschen Tabellennamen in der Eingabe.
  • Der Aufteilungspunkt auf Tabellenebene hat mehr als einen Schlüssel.
  • Der Aufteilungspunkt auf Indexebene hat mehr als zwei Schlüssel.
  • Die Aufteilungspunkte sind für Tabellen oder Indexe definiert, die nicht im Datenbankschema definiert sind.
  • Die Anfrage enthält doppelte Aufteilungspunkte.

Weitere Informationen zu allen Kontingenten und Limits finden Sie unter Kontingente und Limits.

Split-Punkte ansehen

Sie können alle erstellten Aufteilungspunkte in Ihrer Datenbank mit derGoogle Cloud Console oder der gcloud CLI aufrufen:

Console

So rufen Sie die Anzahl der Aufteilungspunkte ab, indem Sie die Ansicht SPANNER_SYS.USER_SPLIT_POINTS in der Google Cloud Console abfragen:

  1. Öffnen Sie die Seite „Spanner-Instanzen“.

    Zu Spanner-Instanzen

  2. Wählen Sie die Namen der Spanner-Instanz und der Datenbank aus, die Sie abfragen möchten.

  3. Klicken Sie im linken Navigationsbereich auf Spanner Studio.

  4. Geben Sie die folgende Abfrage in das Textfeld ein:

        SELECT * FROM SPANNER_SYS.USER_SPLIT_POINTS
    
  5. Klicken Sie auf Abfrage ausführen.

Es wird ein Ergebnis wie das folgende angezeigt:

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 on T, Index Key: (10), Primary Table Key: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>) 2025-03-08T07:33:23.861682Z
T T_IDX CloudAddSplitPointsAPI 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) 2025-03-08T07:35:25.990007Z

gcloud

Führen Sie den folgenden gcloud CLI-Befehl aus, um die Aufteilungspunkte in Ihrer Datenbank aufzurufen:

  gcloud spanner databases splits list DATABASE_ID \
  --instance INSTANCE_ID

Ersetzen Sie beim Ausführen dieses Befehls die folgenden Variablen:

  • INSTANCE_ID: Die Spanner-Instanz-ID.
  • DATABASE_ID: die Spanner-Datenbank-ID.

Es wird dann eine Antwort wie die folgende angezeigt:

  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

So lassen Sie einen Split-Point ablaufen

Sie können für jeden erstellten Aufteilungspunkt eine Ablaufzeit festlegen. Weitere Informationen finden Sie unter Ablauf von Aufteilungspunkten. Sie können Split-Punkte mit der gcloud CLI oder den REST APIs ablaufen lassen.

gcloud

Wenn Sie Splitpunkte über die gcloud CLI ablaufen lassen möchten, müssen Sie eine Datei erstellen, die alle Splits enthält, die ablaufen sollen, und ihren Pfad mit dem Parameter splits-file im gcloud CLI-Befehl angeben. Die Datei darf das API-Limit von 100 Punkten pro API-Anfrage nicht überschreiten. Weitere Informationen finden Sie unter Kontingente und Limits.

Die Datei muss das folgende Format verwenden, um die Aufteilungspunkte anzugeben:

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

Ersetzen Sie beim Erstellen der Datei die folgenden Variablen:

  • ObjectType: der Objekttyp des Splits, den Sie ablaufen lassen möchten. Gültige Werte sind TABLE und INDEX.
  • ObjectName: der Name der Datenbanktabelle oder des Index.
  • SplitValue1..N: die Schlüsselwerte für den Aufteilungspunkt, die ablaufen sollen.
  • IndexSplitValue1..N: die Indexschlüsselwerte für einen Indexaufteilungspunkt.
  • TableSplitValue1..N: Die Tabellenschlüsselwerte für einen Indexaufteilungspunkt.

Beachten Sie beim Erstellen der Aufteilungspunktwerte in der Datei die folgenden Regeln:

  • Stringwerte müssen in einfache Anführungszeichen gesetzt werden. Beispiel: 'splitKeyPart'
  • Boolesche Werte können entweder true oder false sein.
  • INT64- und NUMERIC-Spanner-Datentypwerte müssen in einfache Anführungszeichen gesetzt werden. Beispiel: '123' oder '99.99'.
  • Alle anderen Zahlenwerte müssen ohne einfache Anführungszeichen geschrieben werden. Beispiel: 1.287
  • Zeitstempelwerte sollten im Format '2020-06-18T17:24:53Z' in einfachen Anführungszeichen angegeben werden.
  • Die Werte für die Aufteilung müssen in Klammern gesetzt werden.
  • Die Reihenfolge der Werte für die Aufteilungsschlüssel muss mit der Reihenfolge der Primärschlüssel übereinstimmen.
  • Wenn der Aufteilungswert ein Komma enthalten muss, müssen Sie das Komma mit einem Backslash (\) maskieren.
  • Zum Aufteilen von Indexen können Sie entweder den Indexschlüssel oder den gesamten Index und den vollständigen Tabellenschlüssel angeben.
  • Sie müssen immer den vollständigen Schlüssel verwenden, wenn Sie den Aufteilungspunkt angeben.

Im Folgenden finden Sie eine Beispieldatei, die zeigt, wie Aufteilungspunkte angegeben werden:

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

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • SPLITS_FILE: der Pfad zur Aufteilungsdatei.
  • INSTANCE_ID: Instanz-ID.
  • DATABASE_ID: die Datenbank-ID.
  • EXPIRATION_DATE: (optional) das Ablaufdatum der Split Points. Akzeptiert einen Zeitstempel im Format '2020-06-18T17:24:53Z'.
  • INITIATOR: (optional) der Initiator der Aufteilungspunkte.

Führen Sie folgenden Befehl aus:

Linux, macOS oder 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 Version 1

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Projekt-ID.
  • INSTANCE_ID: Instanz-ID.
  • DATABASE_ID: die Datenbank-ID.

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten einen erfolgreichen Statuscode (2xx) und eine leere Antwort als Ausgabe erhalten.

Nächste Schritte