6.1 PGQLを使用したプロパティ・グラフの作成

CREATE PROPERTY GRAPHは、データベース表からグラフを作成するPGQL DDL文です。グラフはプロパティ・グラフ・スキーマに格納されます。

CREATE PROPERTY GRAPH文は、グラフに付ける名前で始まり、その後に頂点表とエッジ表のセットが続きます。グラフには、頂点表またはエッジ表がない(空のグラフ)か、頂点表がありエッジ表はない(頂点のみでエッジなしのグラフ)か、頂点表とエッジ表の両方がある(頂点とエッジのあるグラフ)場合があります。ただし、エッジ表のみで頂点表のないグラフは指定できません。

次のケースについて検討します。

  • PERSONSは、ID列、NAME列およびACCOUNT_NUMBER列がある表です。この表には、アカウントを持つすべての人の行が追加されます。
  • TRANSACTIONSは、FROM_ACCOUNT列、TO_ACCOUNT列、DATE列、AMOUNT列がある表です。FROM_ACCOUNTからTO_ACCOUNTに送金されるたびに、データベース内のこの表に行が追加されます。

表からグラフへの簡単なマッピングは次のようになります。マップされたグラフの概念は、頂点、エッジ、ラベル、プロパティです。

  • 頂点表: データ・エンティティを含む表は頂点表です。
    • 頂点表の各行は頂点です。
    • 頂点表の列は、頂点のプロパティです。
    • 頂点表の名前は、この頂点セットのデフォルト・ラベルです。あるいは、CREATE PROPERTY GRAPH文の一部としてラベル名を指定できます。
  • エッジ表: エッジ表は、2つの頂点表をリンクする任意の表、またはソース・エンティティからターゲット・エンティティへのアクションを示すデータを含む表です。たとえば、FROM_ACCOUNTからTO_ACCOUNTへの送金は自然なエッジです。
    • 外部キー関係により、データ内で関連しているリンクを知ることができます。CREATE PROPERTY GRAPHは、デフォルトで外部キー関係を使用してエッジを識別します。
    • エッジ表のプロパティの一部は、エッジのプロパティにできます。たとえば、FROM_ACCOUNTからTO_ACCOUNTへのエッジには、DATEおよびAMOUNTプロパティを指定できます。
    • エッジ表の名前は、このエッジ・セットのデフォルト・ラベルです。あるいは、CREATE PROPERTY GRAPH文の一部としてラベル名を指定できます。
  • キー:
    • 頂点表のキー: 頂点表のキーは、グラフ内の一意の頂点を識別します。キーはCREATE PROPERTY GRAPH文で指定できます。指定しない場合、デフォルトで表の主キーになります。表に重複した行がある場合は、CREATE PROPERTY GRAPH文によってエラーが返されます。
    • エッジ表のキー: エッジ表のキーは、グラフ内のエッジを一意に識別します。ソースと宛先の頂点を指定すると、KEY句はソースと宛先の頂点を一意に識別します。

    次に、PERSONS表とTRANSACTIONS表のCREATE PROPERTY GRAPH文の例を示します。

    CREATE PROPERTY GRAPH bank_transfers
         VERTEX TABLES (persons KEY(account_number))
         EDGE TABLES(
                      transactions KEY (from_acct, to_acct, date, amount)
                      SOURCE KEY (from_account) REFERENCES persons
                      DESTINATION KEY (to_account) REFERENCES persons
                      PROPERTIES (date, amount)
           )
    
  • 表の別名: 頂点表とエッジ表には一意の名前が付いている必要があります。同じリレーショナル表から複数の頂点表を識別したり、同じリレーショナル表から複数のエッジ表を識別する必要がある場合は、別名を使用する必要があります。たとえば、次の例に示すように、1つの表PERSONSから2つの頂点表PERSONSとPERSONS_IDを作成できます。
    CREATE PROPERTY GRAPH bank_transfers
         VERTEX TABLES (persons KEY(account_number)
                        persons_id AS persons KEY(id))
    
  • REFERENCES句: エッジのソースおよび宛先の頂点を、対応する頂点表に接続します。

詳細は、https://pgql-lang.org/spec/latest/#creating-a-property-graphを参照してください。