创建、更新或删除 Spanner 图架构

本文档介绍了如何使用您在设置和查询 Spanner Graph 中创建的示例架构,在 Spanner Graph 中创建、更新或删除房源图。

Spanner 可让您在不停机的情况下进行架构更新。您可以更新 通过以下任意方式获取现有数据库的架构:

创建属性图表架构

如需详细了解属性图架构,请参阅 Spanner 图架构概览

如需创建属性图表架构,请按以下步骤操作:

  1. 创建节点输入表 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);
    
  2. 创建边缘输入表 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;
    
  3. 使用示例 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
      );
    

此示例遵循以下最佳实践:

如需了解详情,请参阅图架构设计最佳实践

如需了解常见的 Spanner 图架构错误,请参阅问题排查 Spanner 图

更新媒体资源图架构

您可以通过以下方式更新属性图表架构:

  1. 添加新的节点或边定义。
  2. 更新现有节点或边缘定义。
  3. 移除现有的节点或边缘定义。

在每种情况下,您都必须使用更新后的架构重新创建媒体资源图。

添加新的节点或边定义

要添加新节点和新的边定义,请按照下列步骤操作:

  1. 添加新的输入表。

    定义与新的图表元素定义关联的输入表。请参阅以下示例 添加了两个新的输入表 CompanyPersonInvestCompany

    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. 使用 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
      );
    

更新现有节点或边定义

如需更新现有节点或边缘定义,请按以下步骤操作:

  1. 更新输入表架构。以下示例将 mailing_address 列添加到输入表 Person

    ALTER TABLE Person
    ADD COLUMN mailing_address STRING(MAX);
    
  2. 使用 CREATE OR REPLACE PROPERTY GRAPH 更新媒体资源图架构。以下示例将新属性 mailing_address 添加到 使用 CREATE OR REPLACE PROPERTY GRAPHPerson 节点定义 声明。在此示例中,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;

后续步骤