创建和管理数据位置

本页介绍了如何在 Spanner 中创建和管理数据布置。

如需详细了解地理位置分区的工作原理,请参阅地理位置分区概览。

创建数据布置

在创建 Spanner 实例分区和数据库后,创建您的布置。

控制台

  1. 前往 Google Cloud 控制台中的实例页面。

    实例

  2. 选择包含用户创建的实例分区的实例。

  3. 选择要对数据进行分区的数据库。

  4. 在导航菜单中,点击 Spanner Studio。

  5. 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。

  6. 输入 CREATE PLACEMENT(GoogleSQL、PostgreSQL)DDL 语句。

    例如,您可以运行以下命令,在实例分区 europe-partition 中创建布置表 europeplacement:

    GoogleSQL

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

    PostgreSQL

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

    可选:您还可以使用对象探索器窗格查看、搜索布置对象,以及与其进行交互。如需了解详情,请参阅探索数据。

  7. 点击运行。

gcloud

如需使用 gcloud CLI 命令创建布置,请使用 gcloud spanner databases ddl update。

例如,在实例分区 europe-partition 中创建布置:

GoogleSQL

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

PostgreSQL

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

为布置设置默认主要区域

如果布置位于双区域或多区域位置,您可以设置其默认主要区域。新的主要区域必须是双区域或多区域位置中的两个读写区域之一。如需了解详情,请参阅双区域可用配置和多区域可用配置表格。

如果您未设置主要区域,则您的布置会使用其位置指定的默认主要区域。如需查看每个双区域或多区域位置的主要区域列表,请参阅双区域可用配置和多区域可用配置表格。默认主要区域用 L 表示。例如,nam8 的默认主要区域位于洛杉矶(us-west2)。以下说明介绍了如何将其设置为俄勒冈州(us-west1)。

控制台

  1. 前往 Google Cloud 控制台中的实例页面。

    实例

  2. 选择包含用户创建的实例分区的实例。

  3. 选择要对数据进行分区的数据库。

  4. 在导航菜单中,点击 Spanner Studio。

  5. 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。

  6. 输入 CREATE PLACEMENT(GoogleSQL、PostgreSQL)DDL 语句。

    例如,您可以运行以下命令,在实例分区 nam8-partition 中创建布置表 nam8placement,并将默认主要位置设置为 us-west1:

    GoogleSQL

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

    PostgreSQL

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

    可选:您还可以使用对象探索器窗格查看、搜索布置对象,以及与其进行交互。如需了解详情,请参阅探索数据。

  7. 点击运行。

gcloud

如需使用 gcloud CLI 命令创建布置,请使用 gcloud spanner databases ddl update。

例如,在实例分区 nam8-partition 中创建布置表 nam8placement,并将默认主要位置设置为 us-west1:

GoogleSQL

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

PostgreSQL

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

删除数据布置

在删除布置之前,您必须先从该布置中移除所有行数据。完成上述操作后,您可以使用 Google Cloud 控制台或 gcloud CLI 删除布置。

控制台

  1. 在导航菜单中,点击 Spanner Studio。
  2. 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
  3. 输入 DROP PLACEMENT(GoogleSQL、PostgreSQL)DDL 语句

    例如,您可以运行以下命令来删除布置表 europeplacement:

    GoogleSQL

    DROP PLACEMENT europeplacement;
    

    PostgreSQL

    DROP PLACEMENT europeplacement;
    

gcloud

如需使用 gcloud CLI 命令删除布置,请使用 gcloud spanner databases ddl update。

例如,删除布置 europeplacement:

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

删除布置错误

如果相应布置正在使用,则 DROP PLACEMENT 操作会失败,并显示如下错误消息:“语句失败:无法删除布置 PLACEMENT_NAME,因为布置表 PLACEMENT_TABLE_NAME 正在使用该布置”。如果您遇到此错误,请执行以下操作:

  1. 修改应用,以停止插入或更新包含您要删除的布置的行。
  2. 采用以下任一方式:

    • 使用如下所示的分区 DML 语句将使用要删除的布置的现有布置行移至其他布置:

      UPDATE PLACEMENT_TABLE_NAME SET LOCATION = NEW_PLACEMENT_NAME
      WHERE LOCATION = ORIGINAL_PLACEMENT_NAME;
      
    • 使用如下所示的分区 DML 语句删除布置行:

      DELETE FROM PLACEMENT_TABLE_NAME
      WHERE LOCATION = ORIGINAL_PLACEMENT_NAME;
      

      之前的布置专用 DML 语句仅适用于分区 DML。它们会像常规 DML 语句一样失败。如需了解详情,请参阅限制。 您还可以使用变更 API 移动或删除布置行。

取消 DROP PLACEMENT 操作

在长时间运行的操作从数据库架构中完全删除布置之前,您可以随时取消 DROP PLACEMENT 操作。如需详细了解如何获取长时间运行的操作 ID 以检查状态或取消操作,请参阅管理和观察长时间运行的操作。

创建包含布置键的表

控制台

  1. 在导航菜单中,点击 Spanner Studio。
  2. 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
  3. 输入 CREATE TABLE (GoogleSQL、PostgreSQL) DDL 语句。

    例如,您可以创建一个使用布置键来对歌手数据进行分区的 Singers 表:

    GoogleSQL

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

    PostgreSQL

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

gcloud

如需创建表,请使用 gcloud spanner databases ddl update。

例如,您可以创建一个使用布置键来对歌手数据进行分区的 Singers 表:

GoogleSQL

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

PostgreSQL

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

修改包含布置键的表

您无法从表中删除布置键。您也无法在表创建后向其中添加布置键。不过,您可以使用 ALTER TABLE (GoogleSQL、PostgreSQL) DDL 语句来更改表中的其他字段,例如,通过添加和删除非布置键列。

删除包含布置键的表

在删除包含布置键的表之前,您必须先执行以下操作:

  1. 删除布置表中的所有行。
  2. 等待数据库达到 version_retention_period。如需了解详情,请参阅时间点恢复。 然后,请按以下步骤操作:

控制台

  1. 在导航菜单中,点击 Spanner Studio。
  2. 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
  3. 输入 DROP TABLE (GoogleSQL、PostgreSQL) DDL 语句。

    例如,删除 Singers 表:

    DROP TABLE Singers;
    

gcloud

如需删除表,请使用 gcloud spanner databases ddl update。

例如,删除 Singers 表:

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

在布置表中插入行

控制台

  1. 在导航菜单中,点击 Spanner Studio。
  2. 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
  3. 输入 INSERT INTO (GoogleSQL、PostgreSQL) DDL 语句。

    例如,将歌手 Marc Richards 添加到 Singers 表中,并在 europeplacement 中对该表进行分区:

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

gcloud

如需将数据写入表,请使用 gcloud spanner rows insert。

例如,将歌手 Marc Richards 添加到 Singers 表中,并在 europeplacement 中对该表进行分区:

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

更新布置表中的行

控制台

  1. 在导航菜单中,点击 Spanner Studio。
  2. 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
  3. 使用 DML 或变更更新布置表中的数据。

    例如,将 Singers 表中的 singerid=1 的名称更新为 Catalina Smith:

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

gcloud

如需更新布置表中的数据,请使用 gcloud spanner rows update。

例如,将 Singers 表中的 singerid=1 的名称更新为 Catalina Smith:

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

移动布置表中的行

控制台

  1. 创建新的实例分区和布置(如果您尚未创建)。
  2. 在导航菜单中,点击 Spanner Studio。
  3. 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
  4. 使用 DML 或变更将数据移至新的实例分区。

    例如,将 Singers 表中的 singerid=1 移至 asiaplacement:

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

gcloud

创建要将数据移至其中的实例分区和布置后,请使用 gcloud spanner rows update。

例如,将 Singers 表中的 singerid=1 移至 asiaplacement:

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

删除布置表中的行

控制台

  1. 在导航菜单中,点击 Spanner Studio。
  2. 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
  3. 使用 DML 或变更删除数据。

    例如,删除 Singers 表中的 singerid=1:

    DELETE FROM Singers s
    WHERE s.id=1;
    

gcloud

如需删除数据,请使用 gcloud spanner rows delete。

例如,删除 Singers 表中的 singerid=1:

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

查询布置表中的数据

控制台

  1. 在导航菜单中,点击 Spanner Studio。
  2. 在 Spanner Studio 页面上,点击 新标签页或使用空白编辑器标签页。
  3. 运行查询。

    例如,查询 Singers 表:

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

gcloud

如需查询数据,请使用 gcloud spanner databases execute-sql。

例如,查询 Singers 表:

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

后续步骤