Spanner Graph スキーマを管理する

このドキュメントでは、Spanner Graph プロパティ スキーマの管理に関する包括的なガイドを提供します。DDL ステートメントを使用してスキーマを作成更新削除するプロセスについて詳しく説明します。

プロパティ グラフ スキーマの詳細については、Spanner Graph スキーマの概要をご覧ください。プロパティ グラフ スキーマの作成時にエラーが発生した場合は、Spanner Graph のトラブルシューティングをご覧ください。

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

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

  1. ノード入力テーブルを作成します
  2. エッジ入力テーブルを作成します
  3. プロパティ グラフを定義します

プロパティ グラフ スキーマを作成するときは、ベスト プラクティスを必ず考慮してください。

次のセクションでは、プロパティ グラフ スキーマの例を作成する方法について説明します。

ノード入力テーブルを作成する

次の例では、2 つのノード入力テーブル(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;

プロパティ グラフを定義する

次のコードは、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
    );

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

プロパティ グラフ スキーマを作成したら、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;

次のステップ