管理 Spanner Graph 架构

本文档全面介绍了如何管理 Spanner Graph 属性架构,详细说明了如何使用 DDL 语句创建更新删除架构。

如需详细了解属性图表架构,请参阅 Spanner Graph 架构概览。 如果您在创建属性图表架构时遇到错误,请参阅排查 Spanner Graph 问题

创建属性图表架构

如需创建属性图表架构,请执行以下操作:

  1. 创建节点输入表
  2. 创建边缘输入表
  3. 定义属性图

创建属性图表架构时,请务必考虑最佳实践

以下部分展示了如何创建属性图表架构示例:

创建节点输入表

以下代码会创建两个节点输入表(PersonAccount),这两个表用作示例属性图表中节点定义的输入:

  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); 

创建边缘输入表

以下代码会创建两个边缘输入表(PersonOwnAccountAccountTransferAccount),作为示例属性图表中边缘定义的输入:

  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 的属性图表,其中包含 AccountPerson 节点以及 PersonOwnAccountAccountTransferAccount 边缘:

  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 语句,并省略要从图表中移除的定义。

添加新的节点或边缘定义

如需添加新节点和新边缘定义,请按以下步骤操作:

  1. 添加新的节点定义输入表 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; 
  2. 通过添加新的 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。如需了解详情,请参阅自定义标签和属性

以下步骤展示了如何更新架构的基础表,然后将更新应用到架构。

  1. Person 基础输入表中添加 mailing_address 列。

    ALTER TABLE Person ADD COLUMN mailing_address STRING(MAX); 
  2. 将更改应用于 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; 

后续步骤