本文提供 Spanner 圖形屬性結構定義的管理指南,詳細說明如何使用 DDL 陳述式建立、更新及捨棄結構定義。
如要進一步瞭解屬性圖形結構定義,請參閱「Spanner 圖形結構定義總覽」。如果在建立屬性圖形結構定義時發生錯誤,請參閱「排解 Spanner 圖形問題」。
建立屬性圖表結構定義
如要建立屬性圖表結構定義,請按照下列步驟操作:
建立屬性圖表結構定義時,請務必遵循最佳做法。
以下各節說明如何建立範例屬性圖表結構定義:
建立節點輸入資料表
下列範例會建立兩個節點輸入資料表 Person 和 Account,做為範例屬性圖形中節點定義的輸入內容:
  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);
建立邊緣輸入資料表
下列程式碼會建立兩個邊緣輸入資料表 PersonOwnAccount 和 AccountTransferAccount,做為範例屬性圖中邊緣定義的輸入內容:
  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 的屬性圖,其中包含 Account 和 Person 節點,以及 PersonOwnAccount 和 AccountTransferAccount 邊緣:
  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陳述式,並省略要從圖表中移除的定義。
新增節點或邊緣定義
如要新增節點和邊緣定義,請按照下列步驟操作:
新增節點定義輸入資料表
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;新增
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。詳情請參閱「自訂標籤和屬性」。
下列步驟說明如何更新結構定義的基礎資料表,然後將更新套用至結構定義。
在
Person基礎輸入表格中新增mailing_address欄。ALTER TABLE Person ADD COLUMN mailing_address STRING(MAX);將
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;