このドキュメントでは、Spanner Graph を設定してクエリを実行するで作成したサンプル スキーマを使用して、Spanner Graph でプロパティ グラフを作成、更新、削除する方法について説明します。
Spanner を使用すると、ダウンタイムなしでスキーマの更新を行うことができます。既存のデータベースのスキーマは、次のいずれかの方法で更新できます。
Google Cloud コンソール
[Spanner Studio] ページでコマンドを送信します。
[Spanner Studio] ページにアクセスするには、[データベースの概要] ページまたは [テーブルの概要] ページで [Spanner Studio] をクリックします。Spanner Studio へのアクセスの詳細については、Google Cloud コンソールを使用してデータを管理するをご覧ください。
gcloud spanner
コマンドライン ツールgcloud spanner databases ddl update
コマンドを使用してコマンドを送信します。UpdateDatabaseDdl
RPC API
プロパティ グラフ スキーマを作成する
プロパティ グラフ スキーマの詳細については、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
ステートメントの例を使用して、プロパティ グラフを定義します。次の例では、
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 のトラブルシューティングをご覧ください。
プロパティ グラフ スキーマを更新する
プロパティ グラフ スキーマは、次の方法で更新できます。
- 新しいノード定義またはエッジ定義を追加します。
- 既存のノード定義またはエッジ定義を更新します。
- 既存のノード定義またはエッジ定義を削除します。
いずれの場合も、更新されたスキーマを使用してプロパティ グラフを再作成する必要があります。
新しいノード定義またはエッジ定義を追加する
新しいノード定義と新しいエッジ定義を追加する手順は次のとおりです。
新しい入力テーブルを追加します。
新しいグラフ要素定義に関連付けられた入力テーブルを定義します。次の例では、2 つの新しい入力テーブル
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;
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 );
既存のノード定義またはエッジ定義を更新する
既存のノード定義またはエッジ定義を更新する手順は次のとおりです。
入力テーブルのスキーマを更新します。次の例では、入力テーブル
Person
にmailing_address
列を追加します。ALTER TABLE Person ADD COLUMN mailing_address STRING(MAX);
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;
次のステップ
- Spanner Graph データを挿入、更新、削除する。
- Spanner Graph クエリについて学習する。
- Spanner Graph クエリをチューニングするためのベスト プラクティスを確認する。