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))
    
  • プロパティ: グラフの頂点プロパティおよびエッジ・プロパティはそれぞれ、頂点表およびエッジ表の列から導出され、デフォルトでは基礎となる表の列と同じ名前になります。ただし、列ごとに異なるプロパティ名を選択できます。これは、2つの表の列名が同じでデータ型が異なる場合に競合を回避するのに役立ちます。
    次の例では、頂点プロパティIDNAMEおよびACCOUNT_NUMBERの名前をそれぞれPERSON_IDPERSON_NAMEおよびAC_NOに変更します。
    CREATE PROPERTY GRAPH bank_transfers
    VERTEX TABLES (
    PERSONS
    LABEL Person
    PROPERTIES (ID AS PERSON_ID, NAME AS PERSON_NAME, ACCOUNT_NUMBER AS AC_NO)
    )
  • REFERENCES句: エッジのソースおよび宛先の頂点を、対応する頂点表に接続します。

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

次の表に、CREATE PROPERTY GRAPH文を使用してプロパティ・グラフを作成できる様々な方法を示します。

表6-1 CREATE PROPERTY GRAPH文のサポート

メソッド 詳細情報
oracle.pgx.api Javaパッケージを使用して、グラフ・サーバー(PGX)にプロパティ・グラフを作成する CREATE PROPERTY GRAPH文を実行するためのJava API
pypgx.api Pythonパッケージを使用して、グラフ・サーバー(PGX)にプロパティ・グラフを作成する CREATE PROPERTY GRAPH文を実行するためのPython API
oracle.pg.rdbms.pgql Javaパッケージを使用して、Oracle Database (プロパティ・グラフ・スキーマ)にプロパティ・グラフを作成する CREATE PROPERTY GRAPH文によるプロパティ・グラフの作成
opgpy.pgql Pythonパッケージを使用して、Oracle Database (プロパティ・グラフ・スキーマ)にプロパティ・グラフを作成する Pythonクライアントを使用したプロパティ・グラフの作成
Oracle Database表でプロパティ・グラフ・ビューを作成する プロパティ・グラフ・ビューの作成