グラフ スキーマのベスト プラクティス
このドキュメントでは、グラフクエリのパフォーマンスを向上させるためにグラフ スキーマを定義する際のベスト プラクティスについて説明します。
プロパティ定義のスコープを設定する
プロパティは、ノードまたはエッジに付加された追加情報を提供する Key-Value ペアです。ノードまたはエッジに必要なプロパティのみを含め、PROPERTIES ALL COLUMNS 構文や、ノードまたはエッジテーブルのすべての列をプロパティ リストに付加するデフォルトの構文は使用しないことをおすすめします。ノードまたはエッジに多くのプロパティがあると、グラフクエリで不要な列スキャンが発生し、パフォーマンスが低下する可能性があります。
ノードまたはエッジの定義に含めるプロパティを制限するには、CREATE PROPERTY GRAPH ステートメントで要素のプロパティを定義するときに PROPERTIES キーワードを使用します。
次のノードテーブル定義では、Person ノードテーブルのプロパティを id と name に制限しています。
NODE TABLES (
graph_db.Person PROPERTIES (id, name)
)
グラフノードとエッジに主キー制約と外部キー制約を定義する
BigQuery は、ノードテーブルとエッジテーブルの主キーと外部キーの制約を使用して、不要なテーブル スキャンを減らすことでグラフクエリを最適化できます。ただし、BigQuery ではテーブルに対する主キー制約や外部キー制約は適用されません。アプリケーションで参照整合性や主キーの一意性を保証できない場合、クエリの最適化に主キーまたは外部キーを使用すると、クエリ結果が不正確になる可能性があります。
次の例では、ノードテーブル Person と Account、エッジテーブル PersonOwnAccount に主キー制約と外部キー制約を定義します。
CREATE OR REPLACE TABLE graph_db.Person (
id INT64,
name STRING,
birthday TIMESTAMP,
country STRING,
city STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.Account (
id INT64,
create_time TIMESTAMP,
is_blocked BOOL,
nick_name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.PersonOwnAccount (
id INT64 NOT NULL,
account_id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id, account_id) NOT ENFORCED,
FOREIGN KEY (id) references graph_db.Person(id) NOT ENFORCED,
FOREIGN KEY (account_id) references graph_db.Account(id) NOT ENFORCED
);
次のステップ
- グラフの詳細については、BigQuery Graph の概要をご覧ください。
- スキーマの定義の詳細については、スキーマの概要をご覧ください。
- グラフクエリの作成の詳細については、グラフクエリの概要をご覧ください。