本文档全面介绍了如何管理 Spanner Graph 属性架构,详细说明了如何使用 DDL 语句创建、更新和删除架构。
如需详细了解属性图表架构,请参阅 Spanner Graph 架构概览。 如果您在创建属性图表架构时遇到错误,请参阅排查 Spanner Graph 问题。
创建属性图表架构
如需创建属性图表架构,请执行以下操作:
创建属性图表架构时,请务必考虑最佳实践。
以下部分展示了如何创建属性图表架构示例:
创建节点输入表
以下代码会创建两个节点输入表(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;