4 SQLプロパティ・グラフの概要

SQLプロパティ・グラフは、任意のSQLベースのインタフェース(SQL Developer、SQLPLUS、SQLclなど)またはJDBCを使用するJavaプログラムで操作できます。

SQL文を使用すると、次のことを実行できます:

  • スキーマ内の既存のデータベース・オブジェクトから、次のようなSQLプロパティ・グラフを作成します:
  • SQLプロパティ・グラフのシノニムを作成します。
  • SQLプロパティ・グラフを再検証します。
  • SQLプロパティ・グラフの名前を変更します
  • SQLプロパティ・グラフでグラフ・パターン一致問合せを実行します。
  • SQLプロパティ・グラフを削除します。

たとえば、次の図では、SQL Developerツールを使用したSQLプロパティ・グラフの作成を示します。

図4-1 SQL Developerを使用したSQLプロパティ・グラフの作成

図4-1の説明が続きます
「図4-1 SQL Developerを使用したSQLプロパティ・グラフの作成」の説明

4.1 SQLプロパティ・グラフの操作のクイック・スタート

このチュートリアルは、SQLプロパティ・グラフでのグラフ・アルゴリズムの作成、問合せおよび実行を開始するのに役立ちます。

開始する前に、SQLプロパティ・グラフを作成および削除するために必要な権限があることを確認してください。詳細は、「SQLプロパティ・グラフに対するシステム権限およびオブジェクト権限の付与」を参照してください。

次のチュートリアルは、SQLclツールを使用しており、データベース表のグラフ・サーバー・インストールで提供されるサンプル銀行グラフ・データ(サンプル・グラフ・データの使用を参照)に基づいています。ただし、これらの例は任意のSQLベースのインタフェースを使用して実行できます。
  1. CREATE PROPERTY GRAPH DDL文を使用してSQLプロパティ・グラフを作成します。
    SQL> CREATE PROPERTY GRAPH bank_sql_graph
      2    VERTEX TABLES (
      3      BANK_ACCOUNTS
      4        KEY ( id )
      5        LABEL accounts
      6        PROPERTIES ( id, name )
      7    )
      8    EDGE TABLES (
      9      BANK_TRANSFERS
     10        SOURCE KEY ( src_acct_id ) REFERENCES BANK_ACCOUNTS(id)
     11        DESTINATION KEY ( dst_acct_id ) REFERENCES BANK_ACCOUNTS(id)
     12        LABEL transfers
     13        PROPERTIES ( amount, description, src_acct_id, dst_acct_id, txn_id )
     14*   );
    
    Property GRAPH created.

    実行時に、bank_sql_graphグラフがデータベースに作成されます。グラフは、1つの頂点グラフ要素表(bank_accounts)と1つのエッジ・グラフ要素表(bank_transfers)で構成されます。

    グラフ要素表、キー、ラベルおよびプロパティの概念を学習するには、「SQLプロパティ・グラフの作成」を参照してください。

  2. 新しく作成したグラフでSQLグラフ問合せを実行して、id816を持つアカウントのすべてのトランザクションをリストします。
    SQL> SELECT * FROM GRAPH_TABLE (bank_sql_graph
      2    MATCH
      3    (a IS accounts WHERE a.id = 816) -[e IS transfers]-> (b IS accounts)
      4    COLUMNS (a.id AS acc_a, e.amount AS amount, b.id AS acc_b)
      5* );
    
       ACC_A    AMOUNT    ACC_B
    ________ _________ ________
         816      8781      287
         816      6381      590
         816      9011      934
         816      6890      289
         816      4443      812

    詳細は、SQLグラフ問合せを参照してください。

  3. オプションで、グラフ・サーバー(PGX)をインストールした場合は、グラフ・ビジュアライゼーション・ツールを使用して前述のSQLグラフ問合せをビジュアル化することもできます。

    唯一の違いは、SQLグラフ問合せの頂点とエッジをIDおよびすべてのラベルとプロパティとともにビジュアル化するために、頂点およびエッジIDを返す必要がある点です。次の例のCOLUMNS句では、VERTEX_IDおよびEDGE_ID関数が使用されています:

    図4-2 SQLグラフ問合せのビジュアル化

    図4-2の説明が続きます
    「図4-2 SQLグラフ問合せのビジュアル化」の説明
  4. グラフ・アルゴリズムを実行する場合は、グラフをグラフ・サーバー(PGX)にロードします。
    opg4j> var graph = session.readGraphByName("BANK_SQL_GRAPH", GraphSource.PG_SQL)
    graph ==> PgxGraph[name=BANK_SQL_GRAPH,N=1000,E=5001,created=1752053171422]
    PgxGraph graph = session.readGraphByName("BANK_SQL_GRAPH", GraphSource.PG_SQL);
    >>> graph = session.read_graph_by_name("BANK_SQL_GRAPH", "pg_sql")
    >>> graph
    PgxGraph(name: BANK_SQL_GRAPH, v: 1000, e: 5001, directed: True, memory(Mb): 0)
  5. 次のように、PageRankアルゴリズムを実行します。
    opg4j> var analyst = session.createAnalyst()
    analyst ==> NamedArgumentAnalyst[session=0fb6bea7-d467-458d-90c3-803d2932df12]
    opg4j> analyst.pagerank(graph)
    $3 ==> VertexProperty[name=pagerank,type=double,graph=bank_sql_graph]
    Analyst analyst = session.createAnalyst();
    analyst.pagerank(graph);
    >>> analyst = session.create_analyst()
    >>> analyst.pagerank(graph)
    VertexProperty(name: pagerank, type: double, graph: bank_sql_graph)
  6. グラフを問い合せて、ページ・ランク別に上位10件のアカウントをリストします。
    opg4j> session.queryPgql("SELECT a.id, a.pagerank FROM MATCH (a) ON bank_sql_graph ORDER BY a.pagerank DESC LIMIT 5").print()
    +-----------------------------+
    | id  | pagerank              |
    +-----------------------------+
    | 387 | 0.007302836252205924  |
    | 406 | 0.006734430614559079  |
    | 135 | 0.006725965475577353  |
    | 934 | 0.006641340764834484  |
    | 397 | 0.0057016075312134595 |
    +-----------------------------+
    $5 ==> PgqlResultSetImpl[graph=bank_sql_graph,numResults=5]
    session.queryPgql("SELECT a.id, a.pagerank FROM MATCH (a) ON bank_sql_graph ORDER BY a.pagerank DESC LIMIT 5").print();
    >>> session.query_pgql("SELECT a.id, a.pagerank FROM MATCH (a) ON bank_sql_graph ORDER BY a.pagerank DESC LIMIT 5").print()
    +-----------------------------+
    | id  | pagerank              |
    +-----------------------------+
    | 387 | 0.007302836252205924  |
    | 406 | 0.006734430614559079  |
    | 135 | 0.006725965475577353  |
    | 934 | 0.006641340764834484  |
    | 397 | 0.0057016075312134595 |
    +-----------------------------+
  7. グラフ問合せの実行後に、SQLプロパティ・グラフを削除します。
    SQL> DROP PROPERTY GRAPH bank_sql_graph;
    
    Property dropped.

4.2 クイック・スタート: Neo4jからのグラフ・データのインポートによるSQLプロパティ・グラフの作成

Oracle Graphには、Neo4jグラフ・データをインポートして、Oracle Autonomous DatabaseインスタンスまたはオンプレミスのOracle DatabaseのいずれかにSQLプロパティ・グラフを作成できるPL/SQLスクリプトが用意されています。

スクリプトはMy Oracle Supportから入手できます。スクリプトのダウンロードについては、MOSノート37473555を参照してください。READMEファイルをクリックして開き、指示に従ってNeo4jグラフ・データをOracle Database (Oracle Autonomous Databaseまたはオンプレミス・データベース)に移行して、SQLプロパティ・グラフを作成します。

次に、READMEファイルに説明されている、実行する必要がある基本的なステップの概要を示します:

  • 必要な前提条件を満たしていることを確認します。
  • グラフ・メタデータをNeo4jから取得し、CSVファイルにエクスポートします。
  • CSVファイルをOracle Databaseにアップロードします(つまり、Autonomous Databaseインスタンスのオブジェクト・ストレージおよびオンプレミス・データベースのローカル・ディレクトリを介して)。
  • 移行ツールを実行して、アップロードしたグラフ・メタデータを読み取り、移行スクリプトを環境に生成します。
  • 移行スクリプトを実行して、Neo4jグラフ・データをOracle Databaseにインポートし、最後にSQLプロパティ・グラフを作成します。