本文將說明如何使用您在「設定及查詢 Spanner Graph」一文中建立的範例結構定義,在 Spanner Graph 中建立、更新或刪除資源圖表。
Spanner 可讓您在不停機的情況下更新結構定義。您可以透過下列任一方式更新現有資料庫的結構定義:
Google Cloud 控制台
在 Spanner Studio 頁面上提交指令。
如要存取「Spanner Studio」頁面,請在「資料庫」總覽或「資料表」總覽頁面中,按一下「Spanner Studio」。如要進一步瞭解如何存取 Spanner Studio,請參閱「使用 Google Cloud 控制台管理資料」。
gcloud spanner
指令列工具使用
gcloud spanner databases ddl update
指令提交指令。UpdateDatabaseDdl
RPC API
建立資源圖結構定義
如要進一步瞭解屬性圖結構定義,請參閱 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 );
這個範例遵循以下最佳做法:
詳情請參閱圖表結構定義設計的最佳做法。
如要瞭解常見的 Spanner Graph 結構定義錯誤,請參閱「排解 Spanner 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;
使用
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 );
更新現有的節點或邊定義
如要更新現有的節點或邊定義,請按照下列步驟操作:
更新輸入資料表結構定義。以下範例會將
mailing_address
欄新增至輸入資料表Person
。ALTER TABLE Person ADD COLUMN mailing_address STRING(MAX);
使用
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;