本文档全面介绍了如何管理 Spanner Graph 属性架构,详细说明了如何使用 DDL 语句创建、更新和删除架构。
如需详细了解属性图表架构,请参阅 Spanner Graph 架构概览。 如果您在创建属性图表架构时遇到错误,请参阅排查 Spanner Graph 问题。
创建属性图表架构
如需创建属性图表架构,请执行以下操作:
创建属性图表架构时,请务必考虑最佳实践。
以下部分展示了如何创建属性图表架构示例:
创建节点输入表
以下代码会创建两个节点输入表(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
    );
更新属性图表架构
创建属性图表架构后,您可以使用 CREATE OR
REPLACE PROPERTY GRAPH 语句更新该架构。此语句通过重新创建具有所需更新的图架构来应用更改。
您可以对属性图表架构进行以下更改:
- 添加节点或边缘定义:为节点和边缘创建新的输入表,然后使用 - CREATE OR REPLACE PROPERTY GRAPH语句将新定义添加到图表中。
- 更新节点或边缘定义:使用新的节点和边缘定义更新底层输入表。然后,使用 - CREATE OR REPLACE PROPERTY GRAPH语句更新图中的定义。
- 移除节点或边缘定义:使用 - CREATE OR REPLACE PROPERTY 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;
- 通过添加新的 - 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。如需了解详情,请参阅自定义标签和属性。
以下步骤展示了如何更新架构的基础表,然后将更新应用到架构。
- 向 - Person基础输入表中添加- mailing_address列。- ALTER TABLE Person ADD COLUMN mailing_address STRING(MAX);
- 将更改应用于 - 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;