管理 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;

后续步骤