このドキュメントでは、Spanner Studio で Spanner Graph スキーマを視覚的に管理する方法について説明します。ビジュアル モデリングを使用すると、手動で DDL ステートメントを作成する代わりに、直感的なインターフェースでノードとエッジをマッピングできるため、グラフ設計が簡素化されます。この機能を使用すると、設計、理解、他のユーザーとの共同作業が容易になります。また、このアプローチでは Spanner Graph スキーマのベスト プラクティスが自動的に適用されるため、最初から最適化されます。
Spanner Graph スキーマは、DDL で作成および編集することもできます。プロパティ グラフ スキーマの詳細については、Spanner Graph スキーマの概要をご覧ください。プロパティ グラフのスキーマの作成時にエラーが発生した場合は、Spanner Graph のトラブルシューティングをご覧ください。

グラフを作成する
まず、Spanner Studio に移動し、ホームページで [グラフを作成] をクリックします。グラフ モデリング ツールでは、グラフをさまざまな方法で柔軟に構築できます。
ゼロから: ビジュアル インターフェースを使用してノードとエッジを完全に設計します。Spanner は、必要な DDL とパフォーマンスを最適化するスキーマ オブジェクトを自動生成します。
既存のテーブルから: 既存のリレーショナル テーブルが相互に接続されている場合は、それらをグラフモデルに直接マッピングします。
ハイブリッド アプローチ: 一部の要素をゼロからモデル化し、他の要素を既存のテーブルからマッピングします。
モデルノード
グラフにノードを追加する手順は次のとおりです。
ゼロから作成する
新しいノードを作成すると、Spanner はそのノードのデータベース テーブルを自動的に生成します。ノードのプロパティとキーを定義すると、Spanner はテーブルの列と主キーを構成します。
- Spanner Studio でグラフ モデリング キャンバスを開きます。
- グラフにノードを追加し、データソースとして [新規] を選択します。
- ノードに名前を割り当てます。このノード用に作成されるテーブルは、この値に従って命名されます。
- ノードにラベルを割り当てます。デフォルトでは、このラベルはノードの名前に一致しますが、変更できます。
- ラベルに関連付けられているプロパティ(名前やデータ型など)を定義します。少なくとも 1 つのプロパティで [要素キーですか?] を選択して、キーとして指定します。null 値を許可しない場合は、[Is not null] を選択します。
既存のテーブルから
ノードを既存のテーブルにマッピングすると、Spanner はテーブルのスキーマを基盤として使用します。ラベル、プロパティ、キーはテーブルから自動的に継承されますが、オーバーライドできます。
- Spanner Studio でグラフ モデリング キャンバスを開きます。
- グラフにノードを追加し、データソースとして [既存のデータソース] を選択します。
- ノードにラベルを割り当てます。デフォルトでは、このラベルはノードの名前に一致しますが、変更できます。
- ラベルに関連付けるプロパティを定義します。Spanner は、テーブルの列をプロパティに、主キーを要素キーにマッピングします。この設定は、次のいずれかの方法でカスタマイズできます。
- 新しいプロパティを作成する: 新しいプロパティを追加します。これにより、Spanner はテーブルに基盤となる列を自動的に作成します。
- プロパティを削除: このノードに不要なマッピングされた列を削除します。
モデルのエッジ
グラフにエッジを追加する手順は次のとおりです。
ゼロから作成する
エッジを新規に作成すると、基盤となるテーブルが自動的に作成されます。移行元ノードと移行先ノードを定義すると、Spanner は必要な主キーと参照列をバックグラウンドで構成します。
Spanner Studio でグラフ モデリング キャンバスを開きます。
グラフにエッジを追加し、そのデータソースとして [New] を選択します。エッジ名を入力します。
移行元ノードと移行先ノードを選択します。Spanner は、ソース要素キーと宛先要素キーの識別に必要なプロパティを生成し、それらをエッジのデフォルトの要素キーとして使用します。
デフォルトでは、Spanner は送信元ノードと宛先ノードの要素キーを使用して各エッジを一意に識別するため、2 つの特定のノード間に存在できるエッジは 1 つだけです。同じ 2 つのノード間に複数のエッジが必要な場合(現実世界でよくあるユースケース)、追加のプロパティを定義し、[要素キー] を選択して、各エッジを一意に保ちます。
エッジにラベルを割り当てます。デフォルトでは、これはエッジの名前に一致します。
エッジの追加プロパティを定義します。
エッジを確定すると、Spanner はエッジ トラバーサルを最適化するために必要な DDL ステートメントを自動的に生成します。詳細については、DDL を確認して生成するをご覧ください。
既存のテーブルから
エッジを既存のテーブルにマッピングすると、Spanner はテーブルのスキーマを基盤として使用します。ラベル、プロパティ、キーはテーブルから自動的に継承されますが、オーバーライドしたり、新しいプロパティを追加したりできます。
Spanner Studio でグラフ モデリング キャンバスを開きます。
グラフにエッジを追加し、データソースとして [既存のテーブル] を選択します。
ソースノードと宛先ノードを選択します。移行元と移行先の参照列を定義します。
エッジにラベルを割り当てます。デフォルトでは、これはエッジの入力テーブル名と一致します。
ラベルに関連付けるプロパティを定義します。Spanner は、テーブルの列をプロパティに、主キーをエッジ要素キーに自動的にマッピングします。この設定は、次の方法で変更できます。
- 新しいプロパティを作成する: 新しいプロパティを追加します。Spanner は、テーブルに基盤となる列を作成します。
- プロパティを削除: このエッジに不要なマッピングされた列を削除します。
既存のテーブルから作成されたエッジの場合、Spanner はエッジ トラバーサルを最適化する DDL ステートメントを生成しません。スキーマのベスト プラクティスを参照して、最適化を手動で適用します。
グラフを変更する
既存のプロパティ グラフを Spanner Studio に読み込んで、その構造を更新できます。
- オブジェクト エクスプローラで、編集するグラフを見つけて、 [その他のオプション] メニューから [視覚的に表示/変更] を選択します。
- 新しいノードまたはエッジをゼロから追加するか、既存のテーブルからマッピングします。
- 既存のノードとエッジのプロパティを更新します。基盤となるテーブルで使用可能な列を使用することも、新しいプロパティを追加することもできます。新しいプロパティを追加すると、対応する列が基盤となるテーブルに自動的に追加されます。
- グラフ定義からノードまたはエッジを削除します。
DDL を確認して生成する
モデリングが完了すると、Spanner はモデルに基づいて次の DDL ステートメントを生成します。
CREATE OR REPLACE PROPERTY GRAPH: グラフ定義を作成または更新します。CREATE TABLE: スクラッチで構築されたノードまたはエッジの基盤となるテーブルを作成します。ALTER TABLE ADD COLUMN: 既存のテーブルからマッピングされたノードまたはエッジに新しいプロパティ列を追加します。ALTER TABLE ADD CONSTRAINT: 順方向エッジ トラバーサルを最適化するために外部キー制約を作成します。CREATE INDEX: リバース エッジ トラバーサルを最適化するために、リバース エッジ インデックスを作成します。
グラフの変更を commit する手順は次のとおりです。
- [Generate DDL] ボタンをクリックして、スキーマを生成します。前述の必要な DDL ステートメントが作成されます。
- Spanner Studio エディタで、生成された DDL ステートメントを確認します。ステートメントは実行順に正しく並べられており、各スキーマ オブジェクトを説明するコメントが含まれています。手続きに進む前に、すべてのステートメントを編集できます。
- ステートメントを実行して、変更をデータベースに commit します。
制限事項
- 追加変更のみ: 安全のため、このツールは
DROP TABLEステートメントまたはDROP COLUMNステートメントを生成しません。ノード、エッジ、プロパティを削除すると、PROPERTY GRAPH定義のみが更新されます。基盤となるテーブルと列は削除されません。 - サポートされていないスキーマ オブジェクト: このツールは、考えられるすべてのスキーマ オブジェクト、列のデータ型、修飾子を自動的に生成しません。ただし、生成された DDL ステートメントは、コミットする前にエディタで手動で編集できます。
- 下書きの保存はサポートされていません: グラフをモデル化するときに、ページを閉じると進行状況が保存されません。
- スキーマレス データはサポートされていません: このツールは、正式な構造のグラフのみを生成します。ユースケースでスキーマレス データが必要な場合は、このスキーマの例を基盤として使用して、スキーマレス データグラフを作成できます。
- ビューと名前付きスキーマ テーブルはサポートされていません: ノードとエッジを既存のデータソースにマッピングするときに、データベース ビューまたは名前付きスキーマ テーブルをデータソースとして選択することはできません。
- マッピングされたエッジの制約またはインデックスがない: 既存のテーブルからマッピングされたエッジに対して、外部キー制約または逆エッジ インデックスが生成されません。手動作成については、ベスト プラクティスをご覧ください。