管理 Spanner Graph 結構定義

本文提供 Spanner 圖形屬性結構定義的管理指南,詳細說明如何使用 DDL 陳述式建立更新捨棄結構定義。

如要進一步瞭解屬性圖形結構定義,請參閱「Spanner 圖形結構定義總覽」。如果在建立屬性圖形結構定義時發生錯誤,請參閱「排解 Spanner 圖形問題」。

建立屬性圖表結構定義

如要建立屬性圖表結構定義,請按照下列步驟操作:

  1. 建立節點輸入資料表
  2. 建立邊緣輸入資料表
  3. 定義屬性圖

建立屬性圖表結構定義時,請務必遵循最佳做法

以下各節說明如何建立範例屬性圖表結構定義:

建立節點輸入資料表

下列範例會建立兩個節點輸入資料表 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);

建立邊緣輸入資料表

下列程式碼會建立兩個邊緣輸入資料表 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;

定義屬性圖

下列程式碼使用 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
    );

更新屬性圖結構定義

建立屬性圖表結構定義後,請使用 CREATE OR REPLACE PROPERTY GRAPH 陳述式更新結構定義。這項陳述式會重新建立圖表結構定義,並套用所需更新,藉此套用變更。

您可以對屬性圖形結構定義進行下列變更:

  • 新增節點或邊緣定義:建立節點和邊緣的新輸入資料表,然後使用 CREATE OR REPLACE PROPERTY GRAPH 陳述式將新定義新增至圖表。

  • 更新節點或邊緣定義:使用新的節點和邊緣定義更新基礎輸入資料表。然後使用 CREATE OR REPLACE PROPERTY GRAPH 陳述式更新圖表中的定義。

  • 移除節點或邊緣定義:使用 CREATE OR REPLACE PROPERTY GRAPH 陳述式,並省略要從圖表中移除的定義。

新增節點或邊緣定義

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

  1. 新增節點定義輸入資料表 Company,以及邊緣定義輸入資料表 PersonInvestCompany

    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. 新增 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
      );
    

更新節點或邊緣定義

如要更新現有的節點或邊緣定義,請先變更基礎輸入資料表,然後使用 CREATE OR REPLACE PROPERTY GRAPH 陳述式將結構定義變更套用至圖形。如要自訂從輸入資料表公開的屬性,請使用 PROPERTIES clause。詳情請參閱「自訂標籤和屬性」。

下列步驟說明如何更新結構定義的基礎資料表,然後將更新套用至結構定義。

  1. Person基礎輸入表格中新增 mailing_address 欄。

    ALTER TABLE Person
    ADD COLUMN mailing_address STRING(MAX);
    
  2. Person 表格的變更套用至結構定義。使用 CREATE OR REPLACE PROPERTY GRAPH 陳述式。由於輸入資料表結構定義已變更,因此 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
      );
    

移除節點或邊緣定義

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

以下程式碼會省略 CREATE OR REPLACE PROPERTY GRAPH 陳述式中的 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;

後續步驟