このドキュメントでは、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;