Buat dan kelola titik pemisahan

Halaman ini menjelaskan cara membuat dan mengelola titik pemisahan di database Anda. Anda dapat membuat titik pemisahan untuk memisahkan database sebelumnya guna membantu mempersiapkan peningkatan traffic yang diantisipasi. Untuk mengetahui informasi selengkapnya tentang pra-pemisahan, lihat Ringkasan pra-pemisahan.

Sebelum memulai

  • Untuk mendapatkan izin yang Anda perlukan untuk membuat dan mengelola titik pemisahan, minta administrator untuk memberi Anda peran IAM Cloud Spanner Database Admin (roles/spanner.databaseAdmin) di instance Anda. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

    Peran bawaan ini berisi izin spanner.databases.addSplitPoints, yang diperlukan untuk membuat dan mengelola titik pemisahan.

    Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

  • Contoh gcloud CLI di halaman ini membuat asumsi berikut:

  • Pastikan instance Spanner Anda memiliki cukup node untuk mendukung peningkatan traffic yang diantisipasi. Untuk mengetahui informasi selengkapnya, lihat Ringkasan pra-pemisahan.

Membuat titik pemisahan

Anda dapat membuat titik pemisahan menggunakan Google Cloud CLI atau REST API.

gcloud

Jika ingin membuat titik pemisahan menggunakan Google Cloud CLI, Anda perlu membuat file yang berisi semua pemisahan dan memberikan jalur dalam perintah gcloud CLI. File tidak boleh melebihi batas API, yaitu 100 titik per permintaan API. Untuk mengetahui informasi selengkapnya, silakan melihat Kuota dan batas.

File harus menggunakan format berikut untuk menentukan titik pemisahan:

  ObjectType ObjectName (SplitValue1)
  ObjectType ObjectName (SplitValue2)
  ObjectType ObjectName (SplitValueN)

Ganti variabel berikut saat membuat file:

  • ObjectType: jenis objek yang ingin Anda tambahi pemisahan. Nilai yang valid adalah TABLE dan INDEX.
  • ObjectName: nama tabel atau indeks database.
  • SplitValue1..N: nilai titik pemisahan tempat Anda ingin memperkenalkan pemisahan.

Gunakan aturan berikut saat membuat nilai titik pemisahan dalam file:

  • Nilai string harus berada dalam tanda kutip tunggal. Contoh, 'splitKeyPart'
  • Nilai boolean harus berupa true atau false.
  • Nilai jenis data Spanner INT64 dan NUMERIC harus berada dalam tanda petik tunggal. Misalnya, '123' atau '99.99'.
  • Semua nilai angka lainnya harus ditulis tanpa tanda petik tunggal. Misalnya, 1.287.
  • Nilai stempel waktu harus diberikan dalam format '2020-06-18T17:24:53Z' dalam tanda kutip tunggal.
  • Nilai yang dipisah harus diapit oleh tanda kurung.
  • Urutan nilai kunci pemisahan harus sama dengan urutan kunci utama.
  • Jika nilai yang dipisahkan harus memiliki koma, Anda harus meng-escape koma menggunakan karakter `\`.
  • Untuk membagi indeks, Anda dapat memberikan kunci indeks atau seluruh indeks dan kunci tabel lengkap.
  • Anda harus selalu menggunakan kunci lengkap saat menentukan titik pemisahan.

Berikut adalah contoh file yang menunjukkan cara menentukan titik pemisahan:

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

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • SPLITS_FILE: jalur ke file pemisahan.
  • INSTANCE_ID: ID instance.
  • DATABASE_ID: ID database.
  • EXPIRATION_DATE: (opsional) tanggal habis masa berlaku titik pemisahan. Menerima stempel waktu dalam format '2020-06-18T17:24:53Z'.
  • INITIATOR: (opsional) inisiator titik pemisahan.

Jalankan perintah berikut:

Linux, macOS, atau 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

Anda dapat menggunakan metode projects.instances.databases.addSplitPoints untuk membuat titik pemisahan.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: project ID.
  • INSTANCE_ID: ID instance.
  • DATABASE_ID: ID database.

Metode HTTP dan URL:

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

Meminta isi JSON:

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

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan menerima kode status yang menandakan proses berhasil (2xx), dan sebuah respons kosong.

Library klien

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

Kemungkinan skenario error

Skenario berikut dapat menyebabkan error saat membuat titik pemisahan:

  • Pemisahan tingkat indeks memiliki nama tabel yang salah dalam input.
  • Titik pemisahan tingkat tabel memiliki lebih dari satu kunci.
  • Titik pemisahan tingkat indeks memiliki lebih dari dua kunci.
  • Titik pemisahan ditentukan pada tabel atau indeks yang tidak ditentukan dalam skema database.
  • Permintaan berisi titik pemisahan duplikat.

Untuk mengetahui informasi tentang kuota dan batas, lihat Kuota dan batas.

Melihat titik pemisahan

Anda dapat melihat semua titik pemisahan yang dibuat di database menggunakan konsolGoogle Cloud atau gcloud CLI:

Konsol

Untuk mendapatkan jumlah titik pemisahan dengan membuat kueri tampilan SPANNER_SYS.USER_SPLIT_POINTS di konsol Google Cloud , lakukan hal berikut:

  1. Buka halaman instance Spanner.

    Buka instance Spanner

  2. Pilih nama instance Spanner dan database yang ingin Anda kueri.

  3. Klik Spanner Studio di panel navigasi kiri.

  4. Ketik kueri berikut di kolom teks:

        SELECT * FROM SPANNER_SYS.USER_SPLIT_POINTS
    
  5. Klik Run query.

Hasil yang mirip dengan berikut akan muncul:

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 Indeks: T_IDX pada T, Kunci Indeks: (10), Kunci Tabel Utama: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>) 2025-03-08T07:33:23.861682Z
T T_IDX CloudAddSplitPointsAPI Indeks: T_IDX pada T, Kunci Indeks: (9091), Kunci Tabel Utama: (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a) 2025-03-08T07:35:25.990007Z

gcloud

Jalankan perintah gcloud CLI berikut untuk melihat titik pemisahan di database Anda:

  gcloud spanner databases splits list DATABASE_ID \
  --instance INSTANCE_ID

Ganti variabel berikut saat menjalankan perintah ini:

  • INSTANCE_ID: ID instance Spanner.
  • DATABASE_ID: ID database Spanner.

Respons yang mirip dengan berikut akan muncul:

  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

Cara mengakhiri titik pemisahan

Anda dapat menetapkan waktu habis masa berlaku untuk setiap titik pemisahan yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Masa berlaku titik pemisahan. Anda dapat mengakhiri masa berlaku titik pemisahan menggunakan Google Cloud CLI atau REST API.

gcloud

Jika ingin mengakhiri titik pemisahan menggunakan Google Cloud CLI, Anda perlu membuat file yang berisi semua pemisahan yang ingin diakhiri dan memberikan jalur file tersebut menggunakan parameter splits-file dalam perintah gcloud CLI. File tidak boleh melebihi batas API, yaitu 100 titik per permintaan API. Untuk mengetahui informasi selengkapnya, lihat Kuota dan batas.

File harus menggunakan format berikut untuk menentukan titik pemisahan:

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

Ganti variabel berikut saat membuat file:

  • ObjectType: jenis objek pemisahan yang ingin Anda hapus masa berlakunya. Nilai yang valid adalah TABLE dan INDEX.
  • ObjectName: nama tabel atau indeks database.
  • SplitValue: nilai titik pemisahan yang ingin Anda hapus.

Gunakan aturan berikut saat membuat nilai titik pemisahan dalam file:

  • Nilai string harus berada dalam tanda kutip tunggal. Contoh, 'splitKeyPart'
  • Nilai boolean dapat berupa true atau false.
  • Nilai jenis data Spanner INT64 dan NUMERIC harus berada dalam tanda petik tunggal. Misalnya, '123' atau '99.99'.
  • Semua nilai angka lainnya harus ditulis tanpa tanda petik tunggal. Misalnya, 1.287.
  • Nilai stempel waktu harus diberikan dalam format '2020-06-18T17:24:53Z' dalam tanda kutip tunggal.
  • Nilai yang dipisah harus diapit oleh tanda kurung.
  • Urutan nilai kunci pemisahan harus sama dengan urutan kunci utama.
  • Jika nilai yang dipisahkan harus memiliki koma, Anda harus meng-escape koma menggunakan karakter `\`.
  • Untuk membagi indeks, Anda dapat memberikan kunci indeks atau seluruh indeks dan kunci tabel lengkap.
  • Anda harus selalu menggunakan kunci lengkap saat menentukan titik pemisahan.

Berikut adalah contoh file yang menunjukkan cara menentukan titik pemisahan:

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

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • SPLITS_FILE: jalur ke file pemisahan.
  • INSTANCE_ID: ID instance.
  • DATABASE_ID: ID database.
  • EXPIRATION_DATE: (opsional) tanggal habis masa berlaku titik pemisahan. Menerima stempel waktu dalam format '2020-06-18T17:24:53Z'.
  • INITIATOR: (opsional) inisiator titik pemisahan.

Jalankan perintah berikut:

Linux, macOS, atau 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

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: project ID.
  • INSTANCE_ID: ID instance.
  • DATABASE_ID: ID database.

Metode HTTP dan URL:

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

Meminta isi JSON:

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

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan menerima kode status yang menandakan proses berhasil (2xx), dan sebuah respons kosong.

Apa langkah selanjutnya?