建立、更新或刪除 Spanner 圖表結構定義

本文將說明如何使用您在「設定及查詢 Spanner Graph」一文中建立的範例結構定義,在 Spanner Graph 中建立、更新或刪除資源圖表。

Spanner 可讓您在不停機的情況下更新結構定義。您可以透過下列任一方式更新現有資料庫的結構定義:

建立資源圖結構定義

如要進一步瞭解屬性圖結構定義,請參閱 Spanner 圖結構定義總覽

如要建立房源圖形結構定義,請按照下列步驟操作:

  1. 建立節點輸入表格 PersonAccount。這些資料表會做為範例屬性圖表中的節點定義輸入表格。

    CREATE TABLE Person (
      id               INT64 NOT NULL,
      name             STRING(MAX),
      birthday         TIMESTAMP,
      country          STRING(MAX),
      city             STRING(MAX),
    ) PRIMARY KEY (id);
    
    CREATE TABLE Account (
      id               INT64 NOT NULL,
      create_time      TIMESTAMP,
      is_blocked       BOOL,
      nick_name        STRING(MAX),
    ) PRIMARY KEY (id);
    
  2. 建立邊緣輸入資料表 PersonOwnAccountAccountTransferAccount。這些資料表會做為示例資源圖中邊緣定義的輸入表格。

    CREATE TABLE PersonOwnAccount (
      id               INT64 NOT NULL,
      account_id       INT64 NOT NULL,
      create_time      TIMESTAMP,
      FOREIGN KEY (account_id) REFERENCES Account (id)
    ) PRIMARY KEY (id, account_id),
      INTERLEAVE IN PARENT Person ON DELETE CASCADE;
    
    CREATE TABLE AccountTransferAccount (
      id               INT64 NOT NULL,
      to_id            INT64 NOT NULL,
      amount           FLOAT64,
      create_time      TIMESTAMP NOT NULL,
      order_number     STRING(MAX),
      FOREIGN KEY (to_id) REFERENCES Account (id)
    ) PRIMARY KEY (id, to_id, create_time),
      INTERLEAVE IN PARENT Account ON DELETE CASCADE;
    
  3. 使用範例 CREATE PROPERTY GRAPH 陳述式定義屬性圖。

    以下範例定義名為 FinGraph 的屬性圖,其中包含 AccountPerson 節點,以及 PersonOwnAccountAccountTransferAccount 邊緣。

    CREATE PROPERTY GRAPH FinGraph
      NODE TABLES (
        Account,
        Person
      )
      EDGE TABLES (
        PersonOwnAccount
          SOURCE KEY (id) REFERENCES Person (id)
          DESTINATION KEY (account_id) REFERENCES Account (id)
          LABEL Owns,
        AccountTransferAccount
          SOURCE KEY (id) REFERENCES Account (id)
          DESTINATION KEY (to_id) REFERENCES Account (id)
          LABEL Transfers
      );
    

這個範例遵循以下最佳做法:

詳情請參閱圖表結構定義設計的最佳做法

如要瞭解常見的 Spanner Graph 結構定義錯誤,請參閱「排解 Spanner Graph 問題」。

更新房源圖結構定義

您可以透過下列方式更新資源圖結構定義:

  1. 新增節點或邊定義。
  2. 更新現有的節點或邊定義。
  3. 移除現有的節點或邊定義。

無論是哪種情況,您都必須使用更新後的結構定義重新建立資源圖。

新增節點或邊定義

如要新增節點和邊定義,請按照下列步驟操作:

  1. 新增輸入資料表。

    定義與新圖表元素定義相關聯的輸入資料表。請參考以下範例,其中會新增兩個新的輸入資料表 CompanyPersonInvestCompany

    CREATE TABLE Company (
      id INT64 NOT NULL,
      name STRING(MAX)
    ) PRIMARY KEY (id);
    
    CREATE TABLE PersonInvestCompany (
      id INT64 NOT NULL,
      company_id INT64 NOT NULL,
      FOREIGN KEY (company_id) REFERENCES Company (id)
    ) PRIMARY KEY (id, company_id),
      INTERLEAVE IN PARENT Person ON DELETE CASCADE;
    
  2. 使用 CREATE OR REPLACE PROPERTY GRAPH 更新圖表。以下範例會新增節點定義 Company 和邊定義 PersonInvestCompany,藉此更新 FinGraph 結構定義:

    CREATE OR REPLACE PROPERTY GRAPH FinGraph
      NODE TABLES (
        Person,
        Account,
        Company
      )
      EDGE TABLES (
        AccountTransferAccount
          SOURCE KEY (id) REFERENCES Account
          DESTINATION KEY (to_id) REFERENCES Account
          LABEL Transfers,
        PersonOwnAccount
          SOURCE KEY (id) REFERENCES Person
          DESTINATION KEY (account_id) REFERENCES Account
          LABEL Owns,
        PersonInvestCompany
          SOURCE KEY (id) REFERENCES Person
          DESTINATION KEY (company_id) REFERENCES Company
          LABEL Invests
      );
    

更新現有的節點或邊定義

如要更新現有的節點或邊定義,請按照下列步驟操作:

  1. 更新輸入資料表結構定義。以下範例會將 mailing_address 欄新增至輸入資料表 Person

    ALTER TABLE Person
    ADD COLUMN mailing_address STRING(MAX);
    
  2. 使用 CREATE OR REPLACE PROPERTY GRAPH 更新資源圖結構定義。以下範例會使用 CREATE OR REPLACE PROPERTY GRAPH 陳述式,將新屬性 mailing_address 新增至 Person 節點定義。在這個範例中,由於輸入表格結構定義有所變更,因此 Person 節點定義會自動挑選經過變更的 Person 表格定義。

    CREATE OR REPLACE PROPERTY GRAPH FinGraph
      NODE TABLES (
        Person,
        Account
      )
      EDGE TABLES (
        AccountTransferAccount
          SOURCE KEY (id) REFERENCES Account
          DESTINATION KEY (to_id) REFERENCES Account
          LABEL Transfers,
        PersonOwnAccount
          SOURCE KEY (id) REFERENCES Person
          DESTINATION KEY (account_id) REFERENCES Account
          LABEL Owns
      );
    

    您也可以使用 PROPERTIES clause() 自訂輸入資料表公開的屬性。詳情請參閱「自訂標籤和屬性」。

移除現有的節點或邊定義

如要移除現有的節點或邊定義,請重新建立不含這些節點或邊資料表的資源圖。

以下範例會移除 Person 節點定義和 PersonOwnAccount 邊緣定義。

CREATE OR REPLACE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Account
  )
  EDGE TABLES (
    AccountTransferAccount
      SOURCE KEY (id) REFERENCES Account
      DESTINATION KEY (to_id) REFERENCES Account
      LABEL Transfers
  );

捨棄屬性圖結構定資料

您可以使用 DROP PROPERTY GRAPH DDL 陳述式捨棄圖表結構定義。

以下範例會捨棄 FinGraph 屬性圖結構定義:

DROP PROPERTY GRAPH FinGraph;

後續步驟