本文档介绍了如何使用您在设置和查询 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 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 );
此示例遵循以下最佳实践:
如需了解详情,请参阅图表架构设计最佳实践。
如需了解常见的 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 );
更新现有节点或边缘定义
如需更新现有节点或边缘定义,请按以下步骤操作:
更新输入表架构。以下示例向输入表
Person
添加mailing_address
列。ALTER TABLE Person ADD COLUMN mailing_address STRING(MAX);
使用
CREATE OR REPLACE PROPERTY GRAPH
更新属性图表架构。以下示例使用CREATE OR REPLACE PROPERTY GRAPH
语句向Person
节点定义添加新属性mailing_address
。在此示例中,由于输入表架构发生了更改,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;