建立及管理資料刊登位置

本頁說明如何在 Spanner 中建立及管理資料放置位置。

如要進一步瞭解地理位置分區的運作方式,請參閱地理位置分區總覽

建立資料放置位置

建立 Spanner 執行個體分割區資料庫後,即可建立放置位置。

控制台

  1. 前往 Google Cloud 控制台的「Instances」(執行個體) 頁面。

    執行個體

  2. 選取含有使用者建立執行個體分區的執行個體。

  3. 選取要分割資料的資料庫。

  4. 在導覽選單中,按一下「Spanner Studio」

  5. 在「Spanner Studio」頁面中,按一下 「新增分頁」,或使用空白的編輯器分頁。

  6. 輸入 CREATE PLACEMENT (GoogleSQLPostgreSQL) 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 控制台的「Instances」(執行個體) 頁面。

    執行個體

  2. 選取含有使用者建立執行個體分區的執行個體。

  3. 選取要分割資料的資料庫。

  4. 在導覽選單中,按一下「Spanner Studio」

  5. 在「Spanner Studio」頁面中,按一下 「新增分頁」,或使用空白的編輯器分頁。

  6. 輸入 CREATE PLACEMENT (GoogleSQLPostgreSQL) 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(GoogleSQLPostgreSQL) 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 作業就會失敗,並顯示錯誤訊息,例如:「Statement failed: Placement PLACEMENT_NAME cannot be dropped because it is in use by placement table PLACEMENT_TABLE_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」頁面中,按一下 「New tab」(新增分頁),或使用空白的編輯器分頁。
  3. 輸入 CREATE TABLE (GoogleSQLPostgreSQL) 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 (GoogleSQLPostgreSQL) DDL 陳述式變更資料表中的其他欄位,例如新增及捨棄非放置鍵欄。

使用刊登位置鍵刪除資料表

如要刪除含有刊登位置鍵的資料表,請先完成下列步驟:

  1. 刪除刊登位置表格中的所有資料列。
  2. 等待資料庫通過 version_retention_period。詳情請參閱「時間點復原」。 然後按照下列步驟操作:

控制台

  1. 在導覽選單中,按一下「Spanner Studio」
  2. 在「Spanner Studio」頁面中,按一下 「New tab」(新增分頁),或使用空白的編輯器分頁。
  3. 輸入 DROP TABLE (GoogleSQLPostgreSQL) 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」頁面中,按一下 「New tab」(新增分頁),或使用空白的編輯器分頁。
  3. 輸入 INSERT INTO (GoogleSQLPostgreSQL) 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」頁面中,按一下 「New tab」(新增分頁),或使用空白的編輯器分頁。
  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」頁面中,按一下 「New tab」(新增分頁),或使用空白的編輯器分頁。
  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」頁面中,按一下 「New tab」(新增分頁),或使用空白的編輯器分頁。
  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」頁面中,按一下 「New tab」(新增分頁),或使用空白的編輯器分頁。
  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'

後續步驟