本文档介绍了如何使用您在设置和查询 Spanner Graph 中创建的示例架构,在 Spanner Graph 中创建、更新或删除房源图。
Spanner 可让您在不停机的情况下进行架构更新。您可以更新 通过以下任意方式获取现有数据库的架构:
Google Cloud 控制台
在 Spanner Studio 页面上提交命令。
如需访问 Spanner Studio 页面,请点击 数据库概览或表中的 Spanner Studio 概览页面。如需详细了解如何访问 Spanner 请参见 使用 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 图架构错误,请参阅问题排查 Spanner 图。
更新媒体资源图架构
您可以通过以下方式更新属性图表架构:
- 添加新的节点或边定义。
- 更新现有节点或边缘定义。
- 移除现有的节点或边缘定义。
在每种情况下,您都必须使用更新后的架构重新创建媒体资源图。
添加新的节点或边定义
要添加新节点和新的边定义,请按照下列步骤操作:
添加新的输入表。
定义与新的图表元素定义关联的输入表。请参阅以下示例 添加了两个新的输入表
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
更新图表。通过 以下示例通过添加新节点来更新FinGraph
架构 定义Company
和新的边定义PersonInvestCompany
: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
更新媒体资源图架构。以下示例将新属性mailing_address
添加到 使用CREATE OR REPLACE PROPERTY GRAPH
的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;