本文档介绍了如何使用您在设置和查询 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
语句向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;