スキーマの概要

このドキュメントでは、プロパティ グラフ スキーマのコンポーネントについて説明し、グラフ スキーマを作成して管理する方法を示します。

グラフを使用すると、情報をノードとエッジのネットワークで表す接続されたデータをモデル化できます。グラフ スキーマは、ノードとエッジ、それらのタイプを分類するラベル、それらを記述するプロパティで構成されます。プロパティ グラフのスキーマを定義するには、入力テーブルの行をグラフのノードとエッジにマッピングし、カスタムラベルとプロパティを定義します。BigQuery Graph の詳細については、BigQuery Graph の概要をご覧ください。

プロパティ グラフのデータモデルを理解する

プロパティ グラフを使用すると、接続されたデータをノードとエッジのネットワークとしてモデル化できます。ノードは、データ内のエンティティ(顧客、商品、場所など)を表します。エッジはノード間の接続を表し、購入、フォロー、位置などの関係をキャプチャします。

ノードとエッジには、次の情報を配置できます。

  • ラベル: ノードとエッジタイプを分類します。たとえば、クラスの生徒に Student ラベルと Person ラベルが付いている場合があります。ノードまたはエッジのラベルを明示的に定義しない場合、BigQuery Graph は入力テーブル名をデフォルトのラベルとして使用します。

  • プロパティ: ノードとエッジを記述するために使用されます。たとえば、人物を表すノードに、値 Alexname プロパティと値 1id プロパティがある場合があります。

図 1 の例は、財務活動をモデル化するグラフを設計する方法を示しています。このグラフには、ノードとしてモデル化された次のタイプのエンティティが含まれています。

  • Person: 金融取引に関与する個人を表します。
  • Account: 取引に使用される銀行口座を表します。

これらのエンティティは、次の有向エッジで表されるさまざまなタイプの関係で接続されています。

  • Owns: 1 人につき 1 つ以上のアカウントを所有しています。
  • Transfers: 資金はある口座から別の口座に移動します。

各有向エッジは、ソースノードから宛先ノードへの一方向の関係を表します。たとえば、Transfers エッジは、ソース Account を宛先 Account に接続し、資金の流れを示します。

金融グラフのノード、エッジ、ラベル、プロパティ。

図 1. 複数のノードと有向エッジを含むグラフの例。

ノードとエッジには、プロパティに追加情報が含まれています。

  • Person ノードには次のプロパティが含まれます。

    • nameSTRING
    • idINT64
  • Transfers エッジには、次のプロパティが含まれます。

    • amountFLOAT64

有向エッジと無向エッジ

有向エッジは、エンティティ間の関係の特定の方向を示します。たとえば、ユーザーはアカウントを所有していますが、アカウントはユーザーを所有していません。ただし、ソーシャル ネットワークの友だち関係など、一部の関係は無向であり、相互接続を表します。この場合、無向エッジを 2 つの有向エッジ(各方向に 1 つのエッジ)としてモデル化できます。

スキーマを設計する

BigQuery Graph では、CREATE PROPERTY GRAPH ステートメントを使用してテーブルからグラフを作成できます。グラフを作成するテーブルのことを「入力テーブル」と呼びます。

ノードを定義する

ノードは、次のタイプのテーブルまたはビューの行で定義されます。

  • 標準テーブル
  • 外部テーブル
  • Apache Iceberg マネージド テーブル
  • Lakehouse Iceberg REST カタログ テーブル
  • ビュー(承認済みビューを含む)
  • 非増分マテリアライズド ビュー

ノードを定義するには、NODE TABLESにノードの定義を追加します。最もシンプルなノード定義の形式には、主キーを持つ入力テーブルの名前が含まれます。これにより、入力テーブルの行がグラフのノードにマッピングされます。

次の例では、NODE TABLES 句を使用して、FinGraph プロパティ グラフに Account ノードを定義しています。ノード定義には入力テーブル Account が含まれています。

-- Create an Account table.
CREATE TABLE graph_db.Account (
  id           INT64 NOT NULL,
  create_time  TIMESTAMP,
  PRIMARY KEY (id) NOT ENFORCED
);

-- Use the Account table as the input table for the Account node definition.
CREATE PROPERTY GRAPH graph_db.FinGraph
  NODE TABLES (
    graph_db.Account
  );

デフォルトでは、BigQuery はテーブル名をラベルとして使用し、入力テーブルのすべての列をプロパティとして公開します。

  • 各アカウント ノードは、Account というラベルを持ちます。
  • 各アカウント ノードには、Account テーブルの列から作成された idcreate_time というプロパティが含まれます。

要素キー

ノード定義では、グラフノードを一意に識別する列のコレクションである要素キーも定義します。デフォルトでは、要素キーは入力テーブルの主キーです。または、KEY 句を使用して、要素キーを明示的に定義することもできます。

次の例では、Account ノードと Person ノードを定義しています。Account ノードの要素キーは Account テーブルの主キーになります。Person ノードは、KEY 句を使用して id 列を要素キーとして明示的に指定します。

CREATE TABLE graph_db.Person (
  id           INT64 NOT NULL,
  name         STRING
);

CREATE TABLE graph_db.Account (
  id           INT64 NOT NULL,
  create_time  TIMESTAMP,
  PRIMARY