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

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

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

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

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

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

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

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

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

このチュートリアルを試すには、次の要件を満たしていることを確認してください:

次のチュートリアルでは、ステップ1、ステップ2およびステップ7の例をSQLclツールを使用して実行します。ただし、これらの例は任意のSQLベースのインタフェースを使用して実行できます。
  1. CREATE PROPERTY GRAPH DDL文を使用してSQLプロパティ・グラフを作成します。
    SQL> CREATE PROPERTY GRAPH bank_sql_pg
      2    VERTEX TABLES (
      3      bank_accounts
      4      KEY (id)
      5      LABEL account
      6      PROPERTIES ALL COLUMNS
      7    )
      8    EDGE TABLES (
      9      bank_txns
     10        KEY (txn_id)
     11        SOURCE KEY (from_acct_id) REFERENCES bank_accounts (id)
     12        DESTINATION KEY (to_acct_id) REFERENCES bank_accounts (id)
     13        LABEL transfer
     14        PROPERTIES ALL COLUMNS
     15*   );
    
    Property created.

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

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

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

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

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

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

    図3-2 SQLグラフ問合せの視覚化

    図3-2の説明が続きます
    「図3-2 SQLグラフ問合せの視覚化」の説明
  4. グラフ・アルゴリズムを実行する場合は、グラフをグラフ・サーバー(PGX)にロードします。
    opg4j> var graph = session.readGraphByName("BANK_SQL_PG", GraphSource.PG_SQL)
    graph ==> PgxGraph[name=BANK_SQL_PG,N=1000,E=5001,created=1681020302077]
    PgxGraph graph = session.readGraphByName("BANK_SQL_PG", GraphSource.PG_SQL);
    >>> graph = session.read_graph_by_name("BANK_SQL_PG", "pg_sql")
    >>> graph
    PgxGraph(name: BANK_SQL_PG, 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_PG]
    Analyst analyst = session.createAnalyst();
    analyst.pagerank(graph);
    >>> analyst = session.create_analyst()
    >>> analyst.pagerank(graph)
    VertexProperty(name: pagerank, type: double, graph: BANK_SQL_PG)
  6. グラフを問い合せて、ページ・ランク別に上位10件のアカウントをリストします。
    opg4j> session.queryPgql("SELECT a.id, a.pagerank FROM MATCH (a) ON BANK_SQL_PG 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_PG,numResults=5]
    session.queryPgql("SELECT a.id, a.pagerank FROM MATCH (a) ON BANK_SQL_PG ORDER BY a.pagerank DESC LIMIT 5").print();
    >>> session.query_pgql("SELECT a.id, a.pagerank FROM MATCH (a) ON BANK_SQL_PG 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_pg;
    
    Property dropped.