このドキュメントでは、Spanner Graph プロパティ スキーマの管理に関する包括的なガイドを提供します。DDL ステートメントを使用してスキーマを作成、更新、削除するプロセスについて詳しく説明します。
プロパティ グラフ スキーマの詳細については、Spanner Graph スキーマの概要をご覧ください。プロパティ グラフ スキーマの作成時にエラーが発生した場合は、Spanner Graph のトラブルシューティングをご覧ください。
プロパティ グラフ スキーマを作成する
プロパティ グラフ スキーマを作成するには、次の操作を行います。
プロパティ グラフ スキーマを作成するときは、ベスト プラクティスを必ず考慮してください。
次のセクションでは、プロパティ グラフ スキーマの例を作成する方法について説明します。
ノード入力テーブルを作成する
次の例では、2 つのノード入力テーブル(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);
エッジ入力テーブルを作成する
次のコードでは、例のプロパティ グラフのエッジ定義の入力として、2 つのエッジ入力テーブル 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 ステートメントを使用してプロパティ グラフを定義しています。このステートメントは、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 ステートメントを使用して更新します。このステートメントは、目的の更新でグラフ スキーマを再作成して変更を適用します。
プロパティ グラフ スキーマには、次の変更を加えることができます。
- ノード定義またはエッジ定義を追加する: ノードとエッジの新しい入力テーブルを作成し、 - 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;