Spanner Graph スキーマを作成、更新、削除する

このドキュメントでは、Spanner Graph を設定してクエリを実行するで作成したサンプル スキーマを使用して、Spanner Graph でプロパティ グラフを作成、更新、削除する方法について説明します。

Spanner を使用すると、ダウンタイムなしでスキーマの更新を行うことができます。既存のデータベースのスキーマは、次のいずれかの方法で更新できます。

プロパティ グラフ スキーマを作成する

プロパティ グラフ スキーマの詳細については、Spanner Graph スキーマの概要をご覧ください。

プロパティ グラフ スキーマを作成するには、次の操作を行います。

  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 ステートメントの例を使用して、プロパティ グラフを定義します。

    次の例では、Account ノード、Person ノード、PersonOwnAccount エッジ、AccountTransferAccount エッジを持つ FinGraph という名前のプロパティ グラフを定義しています。

    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 Graph スキーマの一般的なエラーについては、Spanner Graph のトラブルシューティングをご覧ください。

プロパティ グラフ スキーマを更新する

プロパティ グラフ スキーマは、次の方法で更新できます。

  1. 新しいノード定義またはエッジ定義を追加する
  2. 既存のノード定義またはエッジ定義を更新します。
  3. 既存のノード定義またはエッジ定義を削除します。

いずれの場合も、更新されたスキーマを使用してプロパティ グラフを再作成する必要があります。

新しいノード定義またはエッジ定義を追加する

新しいノード定義と新しいエッジ定義を追加する手順は次のとおりです。

  1. 新しい入力テーブルを追加します。

    新しいグラフ要素定義に関連付けられた入力テーブルを定義します。2 つの新しい入力テーブル 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 を使用してグラフを更新します。次の例では、新しいノード定義 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
      );
    

既存のノードまたはエッジの定義を更新する

既存のノード定義またはエッジ定義を更新する手順は次のとおりです。

  1. 入力テーブルのスキーマを更新します。次の例では、入力テーブル Personmailing_address 列を追加しています。

    ALTER TABLE Person
    ADD COLUMN mailing_address STRING(MAX);
    
  2. CREATE OR REPLACE PROPERTY GRAPH を使用してプロパティ グラフ スキーマを更新します。次の例では、CREATE OR REPLACE PROPERTY GRAPH ステートメントを使用して、Person ノード定義に新しいプロパティ mailing_address を追加しています。この例では、入力テーブルのスキーマが変更されたため、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;

次のステップ