本文提供 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;