グラフ スキーマのベスト プラクティス

このドキュメントでは、グラフクエリのパフォーマンスを向上させるためにグラフ スキーマを定義する際のベスト プラクティスについて説明します。

プロパティ定義のスコープを設定する

プロパティは、ノードまたはエッジに付加された追加情報を提供する Key-Value ペアです。ノードまたはエッジに必要なプロパティのみを含め、PROPERTIES ALL COLUMNS 構文や、ノードまたはエッジテーブルのすべての列をプロパティ リストに付加するデフォルトの構文は使用しないことをおすすめします。ノードまたはエッジに多くのプロパティがあると、グラフクエリで不要な列スキャンが発生し、パフォーマンスが低下する可能性があります。

ノードまたはエッジの定義に含めるプロパティを制限するには、CREATE PROPERTY GRAPH ステートメント要素のプロパティを定義するときに PROPERTIES キーワードを使用します。

次のノードテーブル定義では、Person ノードテーブルのプロパティを idname に制限しています。

NODE TABLES (
  graph_db.Person PROPERTIES (id, name)
)

グラフノードとエッジに主キー制約と外部キー制約を定義する

BigQuery は、ノードテーブルとエッジテーブルの主キーと外部キーの制約を使用して、不要なテーブル スキャンを減らすことでグラフクエリを最適化できます。ただし、BigQuery ではテーブルに対する主キー制約や外部キー制約は適用されません。アプリケーションで参照整合性や主キーの一意性を保証できない場合、クエリの最適化に主キーまたは外部キーを使用すると、クエリ結果が不正確になる可能性があります。

次の例では、ノードテーブル PersonAccount、エッジテーブル 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
);

次のステップ