12 クライアント・ツールのスタート・ガイド

複数のクライアント・ツールを使用して、グラフ・サーバー(PGX)とやり取りしたり、データベース内のグラフ・データを直接操作できます。

次の各項では、各種クライアント・ツールの使用方法について説明します:

12.1 対話型グラフ・シェルのCLI

Oracle Graphサーバー・パッケージおよびクライアント・パッケージの両方に、この製品のJava APIおよびPython APIをローカルまたはリモート・コンピュータで操作するための、対話型のコマンドライン・アプリケーションが含まれています。

この対話型グラフ・シェルでは、ユーザーからのコマンドライン入力を動的に解釈し、基になる機能を呼び出してこれらを実行し、結果の印刷や結果の追加処理を行うことができます。グラフ・シェルには、JavaまたはPythonアプリケーションを作成することなくグラフ機能を実行する軽量かつ対話型の方法が用意されています。

グラフ・シェルは、特に次のいずれかの操作を行う場合に役立ちます。

  • 大規模なアプリケーションを作成するのではなく、特定のデータ・セットに対して個別グラフ分析をすばやく実行する
  • 開始の例の実行およびサンプル・データ・セットのデモの作成
  • データ・セットの様々なグラフ分析を対話形式で試行して、データ・セットを探索する
  • 製品の使用方法を学習し、組込みアルゴリズムに適している処理を理解する
  • カスタム・グラフ分析アルゴリズムを開発およびテストする

Java API用のグラフ・シェル(OPG4J)は、Javaシェル・ツール(JShell)の上に実装されます。そのため、タブ補完、履歴、逆検索、セミコロン推論、スクリプト・ファイル、内部変数など、JShellが提供するすべての機能を継承します。Python API用のグラフ・シェル (OPG4Py)では、IPythonがインストールされている場合は、IPythonが使用されます。

次の項では、グラフ・シェルのCLIの起動方法について詳しく説明します。

関連項目:

12.1.1 OPG4Jシェルの起動

OPG4Jシェルの起動

Javaシェルの実行可能ファイルは、グラフ・サーバー(PGX)のインストール後は/opt/oracle/graph/binにあり、Javaクライアントのインストール後は<CLIENT_INSTALL_DIR>/binにあります。

OPG4JシェルではJShellが使用されます。つまり、このシェルはJava 11以降で実行する必要があります。前提条件の詳細は、「グラフ・サーバーおよびクライアント・ダウンロードからのJavaクライアントのインストール」を参照してください。その後、端末で次のように入力することでOPG4Jシェルを起動できます。

cd /opt/oracle/graph
./bin/opg4j

シェルが起動すると、次のコマンドライン・プロンプトが表示されます。

For an introduction type: /help intro
Oracle Graph Server Shell 23.3.0
Variables instance, session, and analyst ready to use.
opg4j>

グラフ・サーバー機能をライブラリとして使用したアプリケーションの開発で説明するように、デフォルトでは、OPG4JシェルによりローカルPGXインスタンスが作成されて、シェルと同じJVMでグラフ関数が実行されます。

コマンドライン・オプション

使用可能なコマンドライン・オプションのリストを表示するには、--helpopg4jコマンドに追加します。

./bin/opg4j --help

グラフ・サーバー(PGX)に接続せずにopg4jシェルを起動するには、次のように--no_connectオプションを使用します。

./bin/opg4j --no_connect

リモート・モードでのOPG4Jシェルの起動

OPG4Jシェルでは、別のJVM (別のマシン上など)で実行されているグラフ・サーバー(PGX)インスタンスに接続できます。OPG4Jシェルをリモート・モードで起動するには、次のように--base_urlパラメータを指定する必要があります。
./bin/opg4j --base_url https://<host>:7007 --username <graphuser>
説明:
  • <host>: サーバー・ホスト
  • <graphuser>: データベース・ユーザー

    データベース・パスワードの入力を要求されます。

ノート:

グラフ・サーバー(PGX)は、デフォルトでポート7007でリスニングします。必要に応じて、サーバー構成ファイル(server.conf)内のポート値を変更して、別のポートでリスニングするようにグラフ・サーバーを構成できます。詳細は、グラフ・サーバー(PGX)の構成を参照してください。

シェルが起動すると、次のコマンドライン・プロンプトが表示されます。

Oracle Graph Server Shell 23.3.0
Variables instance, session, and analyst ready to use.
opg4j>

Javaの複数のバージョンがインストールされている場合、シェルを起動する前にJAVA_HOME変数を設定することにより、インストールを簡単に切り替えることができます。たとえば:

export JAVA_HOME=/usr/lib/jvm/java-11-oracle

スクリプトのバッチ実行

OPG4Jシェルでは、スクリプトへのパスをopg4jコマンドに渡すことで、スクリプトを実行できます。たとえば:

./bin/opg4j /path/to/script.jsh

事前定義済関数

OPG4Jシェルには次のユーティリティ関数があります。

  • println(String): System.out.println(String)の簡略表現。
  • loglevel(String loggerName, String levelName): ログレベルを設定する便利な機能。

loglevel関数では、ロガーに対してログ・レベルを設定できます。たとえば、loglevel("ROOT", "INFO")はルート・ロガーのレベルをINFOに設定します。これにより、INFOおよび上位のログ(WARNERRORFATAL)がすべてコンソールに出力されます。

スクリプトの引数

グラフ・サーバー(PGX)によって実行されるスクリプトにパラメータを指定することもできます。たとえば:

./bin/opg4j /path/to/script.jsh script-arg-1 script-arg-2

スクリプト/path/to/script.jshは、arguments.scriptArgs変数を介して引数にアクセスできます。引数は文字列の配列(String[])として指定します。たとえば:

Arrays.stream(arguments.scriptArgs).forEach((a) -> 
    System.out.println(a));

前述の例では、出力が次のように出力されます:

script-arg-1
script-arg-2

対話方式モードの維持

デフォルトでは、OPG4Jシェルは、実行が終了すると終了します。スクリプトが正常に終了した後も対話モードのままにするには、--keep_runningフラグをシェルに渡します。たとえば:

./bin/opg4j -b https://myserver.com:7007/ /path/to/script.jsh --keep_running

12.1.2 OPG4Pyシェルの起動

OPG4Pyシェルの起動

OPG4Pyシェルの実行可能ファイルは、グラフ・サーバー(PGX)のインストール後は/opt/oracle/graph/binにあり、Pythonクライアントのインストール後は<CLIENT_INSTALL_DIR>/binにあります。

OPG4Pyシェルを起動する前に、Pythonクライアントのインストールの前提条件で説明されている前提条件をシステムが満たしていることを確認します。その後、端末で次のように入力することでOPG4Pyシェルを起動できます。

cd /opt/oracle/graph
./bin/opg4py

シェルが起動すると、次のコマンドライン・プロンプトが表示されます。

Oracle Graph Server Shell 23.3.0
>>>

IPythonがインストールされている場合は、次のプロンプトが表示されます。

In [1]:

グラフ・サーバー機能をライブラリとして使用したアプリケーションの開発で説明するように、デフォルトでは、OPG4PyシェルによりローカルPGXインスタンスが作成されて、シェルと同じJVMでグラフ関数が実行されます。

コマンドライン・オプション

使用可能なコマンドライン・オプションのリストを表示するには、--helpopg4pyコマンドに追加します。

./bin/opg4py --help

グラフ・サーバー(PGX)に接続せずにPyPGXシェルを起動するには、次のように--no_connectオプションを使用します。

./bin/opg4py --no_connect

リモート・モードでのOPG4Pyシェルの起動

OPG4Pyシェルでは、別のJVM (別のマシン上など)で実行されているグラフ・サーバー(PGX)インスタンスに接続できます。OPG4Pyシェルをリモート・モードで起動するには、次のように--base_urlパラメータを指定する必要があります。
./bin/opg4py --base_url https://<host>:7007 --username <graphuser>
説明:
  • <host>: サーバー・ホスト
  • <graphuser>: データベース・ユーザー

    データベース・パスワードの入力を要求されます。

ノート:

グラフ・サーバー(PGX)は、デフォルトでポート7007でリスニングします。必要に応じて、サーバー構成ファイル(server.conf)内のポート値を変更して、別のポートでリスニングするようにグラフ・サーバーを構成できます。詳細は、グラフ・サーバー(PGX)の構成を参照してください。

OPG4Pyシェルが起動すると、次のコマンドライン・プロンプトが表示されます。

Oracle Graph Server Shell 23.3.0
>>>

12.2 Autonomous Databaseグラフ・クライアントの使用

AdbGraphClient APIを使用して、Oracle Graph Clientを使用するかJavaまたはPythonアプリケーションを介して、Autonomous DatabaseのGraph Studio機能にプログラムでアクセスできます。

このAPIには、次の機能があります。

  • Autonomous Databaseで認証する
  • Graph Studio環境を管理する
  • グラフ・サーバー(PGX)に対してグラフ問合せおよびアルゴリズムを実行する
  • Oracle Databaseに対してグラフ問合せを直接実行する

AdbGraphClient APIを使用するには、Oracle Graph Clientインストールへのアクセス権が必要です。APIは、Oracle Graph Server and Clientディストリビューションの一部であるOracle Graph Clientライブラリによって提供されます。JavaまたはPython用のグラフ・クライアント・シェルCLIのインストール方法および開始方法の詳細は、Oracle Graph Clientのインストールを参照してください。

また、Autonomous Databaseグラフ・クライアントを使用する前に、「Autonomous Databaseグラフ・クライアントを使用するための前提条件」で説明されている前提条件をすべて満たしていることを確認してください。
次の例は、AdbGraphClient APIを使用してGraph Studioへの接続を確立し、割り当てられたメモリーで環境を起動し、PGQLプロパティ・グラフをメモリーにロードし、PGQL問合せを実行し、グラフに対してアルゴリズムを実行する方法を示しています。

ノート:

AdbGraphClient APIの詳細は、JavadocおよびPython APIリファレンスを参照してください。
  1. 次のように、対話型グラフ・シェルCLIを起動してAutonomous Databaseインスタンスに接続します:
    cd /opt/oracle/graph
    ./bin/opg4j --no_connect
    For an introduction type: /help intro
    Oracle Graph Server Shell 23.3.0
    opg4j> import oracle.pg.rdbms.*
    opg4j> var config = AdbGraphClientConfiguration.builder()
    opg4j> config.database("<DB_name>")
    opg4j> config.tenancyOcid("<tenancy_OCID>")
    opg4j> config.databaseOcid("<database_OCID>")
    opg4j> config.username("ADBDEV")
    opg4j> config.password("<password_for_ADBDEV>")
    opg4j> config.endpoint("https://<hostname-prefix>.adb.<region>.oraclecloudapps.com/")
    opg4j> var client = new AdbGraphClient(config.build())
    client ==> oracle.pg.rdbms.AdbGraphClient@7b8d1537
    import oracle.pg.rdbms.*;
     
    var config = AdbGraphClientConfiguration.builder();
    config.tenancyOcid("<tenancy_OCID>");
    config.databaseOcid("<database_OCID>");
    config.database("<DB_name>");
    config.username("ADBDEV");
    config.password("<password_for_ADBDEV>");
    config.endpoint("https://<hostname-prefix>.adb.<region>.oraclecloudapps.com/");
     
    var client = new AdbGraphClient(config.build());
    cd /opt/oracle/graph 
    ./bin/opg4py --no_connect
    Oracle Graph Server Shell 23.3.0
    >>> from opg4py.adb import AdbClient
    >>> config = {
    ...          'tenancy_ocid': '<tenancy_OCID>',
    ...          'database': '<DB_name>',
    ...          'database_ocid': '<DB_OCID>',
    ...          'username': 'ADBDEV',
    ...          'password': '<password_for_ADBDEV>',
    ...          'endpoint': 'https://<hostname-prefix>.adb.<region>.oraclecloudapps.com/'
    ... }
    >>> client = AdbClient(config)
  2. 次のコードに示すように、望ましいメモリーでPGXサーバー環境を起動します。
    これにより、Graph Studioで環境作成のためのジョブが発行されます。job.get()は、環境が起動されるまで待機します。環境がclient.isAttached()で正常に起動したかどうかは常に確認できます。環境が稼働中の場合、メソッドはブールtrueを戻します。

    ただし、client.isAttached()がコードの最初のステップでtrueを戻した場合は、環境の作成ステップをスキップできます。

    opg4j> client.isAttached()
    $9 ==> false
    opg4j> var job=client.startEnvironment(10)
    job ==> oracle.pg.rdbms.Job@117e9a56[Not completed]
    opg4j> job.get()
    $11 ==> null
    opg4j> job.getName()
    $11 ==> "Environment Creation - 16 GBs"
    opg4j> job.getType()
    $12 ==> ENVIRONMENT_CREATION
    opg4j> job.getCreatedBy()
    $13 ==> "ADBDEV"
    opg4j> client.isAttached()
    $11 ==> true
     if (!client.isAttached()) {
             var job = client.startEnvironment(10);
             job.get();
             System.out.println("job details: name=" + job.getName() + "type= " + job.getType() +"created_by= " + job.getCreatedBy());
          }
    job details: name=Environment Creation - 16 GBstype= ENVIRONMENT_CREATIONcreated_by= ADBDEV
    >>> client.is_attached()
    False
    >>> job = client.start_environment(10)
    >>> job.get()
    >>> job.get_name()
    'Environment Creation - 16 GBs'
    >>> job.get_created_by()
    'ADBDEV'
    >>> client.is_attached()
    True
    
  3. 次のように、インスタンスおよびセッション・オブジェクトを作成します。
    opg4j> var instance = client.getPgxInstance()
    instance ==> ServerInstance[embedded=false,baseUrl=https://<hostname-prefix>.adb.<region>.oraclecloudapps.com/graph/pgx]
    opg4j> var session = instance.createSession("AdbGraphSession")
    session ==> PgxSession[ID=c403be26-ad0c-45cf-87b7-1da2a48bda54,source=AdbGraphSession]
    ServerInstance instance = client.getPgxInstance();
    PgxSession session = instance.createSession("AdbGraphSession");
    >>> instance = client.get_pgx_instance()
    >>> session = instance.create_session("adb-session")
  4. Autonomous DatabaseインスタンスからメモリーにPGビュー・グラフをロードします。
    opg4j> var graph = session.readGraphByName("BANK_GRAPH", GraphSource.PG_VIEW)
    graph ==> PgxGraph[name=BANK_GRAPH,N=1000,E=5001,created=1647800790654]
    PgxGraph graph = session.readGraphByName("BANK_GRAPH", GraphSource.PG_VIEW);
    >>> graph = session.read_graph_by_name("BANK_GRAPH", "pg_view")
  5. 次のように、アナリストを作成してグラフに対してPagerankアルゴリズムを実行します。
    opg4j> session.createAnalyst().pagerank(graph)
    $16 ==> VertexProperty[name=pagerank,type=double,graph=BANK_GRAPH]
    session.createAnalyst().pagerank(graph);
    >>> session.create_analyst().pagerank(graph)
    VertexProperty(name: pagerank, type: double, graph: BANK_GRAPH)
  6. 次のように、グラフに対してPGQL問合せを実行して結果セットを出力します。
    opg4j> graph.queryPgql("SELECT a.acct_id AS source, a.pagerank, t.amount, b.acct_id AS destination FROM MATCH (a)-[t]->(b) ORDER BY a.pagerank DESC LIMIT 3").print()
    PgqlResultSet rs = graph.queryPgql("SELECT a.acct_id AS source, a.pagerank, t.amount, b.acct_id AS destination FROM MATCH (a)-[t]->(b) ORDER BY a.pagerank DESC LIMIT 3");
    rs.print();
    >>> rs = graph.query_pgql("SELECT a.acct_id AS source, a.pagerank, t.amount, b.acct_id AS destination FROM MATCH (a)-[t]->(b) ORDER BY a.pagerank DESC LIMIT 3").print()
    実行すると、問合せによって次の出力が生成されます。
    +------------------------------------------------------+
    | source | pagerank             | amount | destination |
    +------------------------------------------------------+
    | 387    | 0.007302836252205922 | 1000.0 | 188         |
    | 387    | 0.007302836252205922 | 1000.0 | 374         |
    | 387    | 0.007302836252205922 | 1000.0 | 577         |
    +------------------------------------------------------+
    
  7. 必要に応じて、次のコードに示すように、データベース内のグラフに対してPGQL問合せを直接実行できます。
    データベースへのJDBC接続を確立するために、ウォレットをダウンロードして安全な場所に保存する必要があります。JDBC URL接続文字列の確認方法は、ウォレットを使用したJDBC Thin接続を参照してください。
    opg4j> String jdbcUrl="jdbc:oracle:thin:@<tns_alias>?TNS_ADMIN=<path_to_wallet>"
    opg4j> var conn = DriverManager.getConnection(jdbcUrl,"ADBDEV","<password_for_ADBDEV>")
    conn ==> oracle.jdbc.driver.T4CConnection@36ee8c7b
    opg4j> var pgqlConn = PgqlConnection.getConnection(conn)
    pgqlConn ==> oracle.pg.rdbms.pgql.PgqlConnection@5f27d271
    opg4j> var pgqlStmt = pgqlConn.createStatement()
    pgqlStmt ==> oracle.pg.rdbms.pgql.PgqlExecution@4349f52c
    opg4j> pgqlStmt.executeQuery("SELECT a.acct_id AS source, t.amount, b.acct_id AS destination FROM MATCH (a)-[t]->(b) ON BANK_GRAPH LIMIT 3").print()
    import oracle.pg.rdbms.pgql.PgqlConnection;
    import oracle.pg.rdbms.pgql.PgqlStatement;
    import oracle.pg.rdbms.pgql.PgqlResultSet;
    import oracle.pgx.api.*;
    import oracle.pg.rdbms.GraphServer;
    import oracle.pg.rdbms.pgql.jdbc.PgqlJdbcRdbmsDriver;
    ….
    DriverManager.registerDriver(new PgqlJdbcRdbmsDriver());
    String jdbcUrl="jdbc:oracle:thin:@<tns_alias>?TNS_ADMIN=<path_to_wallet>";
    Connection conn = DriverManager.getConnection(jdbcUrl,"ADBDEV","<password_for_ADBDEV>");
    PgqlConnection pgqlConn = PgqlConnection.getConnection(conn);
    PgqlStatement pgqlStmt = pgqlConn.createStatement();
    PgqlResultSet rs = pgqlStmt.executeQuery("SELECT a.acct_id AS source, t.amount, b.acct_id AS destination FROM MATCH (a)-[t]->(b) ON BANK_GRAPH LIMIT 3");
    rs.print();
    >>> jdbcUrl = "jdbc:oracle:thin:@<tns_alias>?TNS_ADMIN=<path_to_wallet>"
    >>> pgql_conn = opg4py.pgql.get_connection("ADBDEV","<password_for_ADBDEV>", jdbcUrl)
    >>> pgql_statement = pgql_conn.create_statement()
    >>> pgql_statement.execute_query("SELECT a.acct_id AS source, t.amount, b.acct_id AS destination FROM MATCH (a)-[t]->(b) ON BANK_GRAPH LIMIT 3").print()
    実行すると、問合せによって次の出力が生成されます。
    +-------------------------------+
    | SOURCE | AMOUNT | DESTINATION |
    +-------------------------------+
    | 1000   | 1000   | 921         |
    | 1000   | 1000   | 662         |
    | 1000   | 1000   | 506         |
    +-------------------------------+
    
  8. 次のように、すべてのグラフ問合せを実行した後、セッションを閉じます。
    opg4j> session.close()
    opg4j> session.close();
    >>> session.close()

12.2.1 Autonomous Databaseグラフ・クライアントを使用するための前提条件

AdbGraphClient APIの使用を開始するための前提条件として、次を実行する必要があります。

  • Oracle Autonomous DatabaseでAutonomous Databaseインスタンスをプロビジョニングする。
  • 接続するために、次のテナンシ詳細を取得する。
    キー 説明 詳細情報
    tenancy OCID テナンシのOracle Cloud ID (OCID) テナンシのOCIDを確認するには、Oracle Cloud InfrastructureドキュメントのテナンシのOCIDを確認する場所に関する項を参照してください。
    database Autonomous Databaseインスタンスのデータベース名
    1. OCIコンソールを開き、左側のナビゲーション・メニューで「Oracle Database」をクリックします。
    2. 「Autonomous Database」をクリックし、「Autonomous Database」ページにナビゲートします。
    3. 「表示名」列で必要なAutonomous Databaseを選択し、「Autonomous Databaseの詳細」ページにナビゲートします。
    4. 「Autonomous Database情報」タブの「一般情報」下の「データベース名」を書き留めます。
    database OCID Autonomous DatabaseのOracle Cloud ID (OCID)
    1. OCIコンソールを開き、左側のナビゲーション・メニューで「Oracle Database」をクリックします。
    2. 「Autonomous Database」をクリックし、「Autonomous Database」ページにナビゲートします。
    3. 「表示名」列で必要なAutonomous Databaseを選択し、「Autonomous Databaseの詳細」ページにナビゲートします。
    4. 「Autonomous Database情報」タブの「一般情報」下の「データベースOCID」を書き留めます。
    username Graph Studioへのログインに使用される、グラフ対応のAutonomous Databaseユーザー名 詳細は、グラフ・ユーザーの作成を参照してください。
    password グラフ・ユーザーのデータベース・パスワード グラフ・ユーザーのパスワードを忘れた場合は、ADMINユーザーとして「データベース・アクション」にログインすることで、グラフ・ユーザーのパスワードをいつでもリセットできます。詳細は、ユーザーの編集を参照してください。
    endpoint Graph StudioのエンドポイントURL
    1. Autonomous Databaseインスタンスを選択し、「Autonomous Databaseの詳細」ページにナビゲートします。
    2. 「ツール」タブをクリックします。
    3. 「Graph Studio」をクリックします。
    4. 「Graph Studio」ログイン画面を開く新しいタブのURLをコピーします。
    5. URLを編集して、oraclecloudapps.comの後の部分を削除し、エンドポイントURLを取得します。

      たとえば、エンドポイントURLのサンプル形式を次に示します。

      https://<hostname_prefix>.adb.<region_identifier>.oraclecloudapps.com
  • Graph Studioにアクセスし、PGビュー・グラフを作成する。
  • Oracle Graph JavaまたはPythonクライアントをダウンロードしてインストールし、起動する。

12.3 グラフ・ビジュアライゼーションWebクライアントの使用

グラフ・ビジュアライゼーション・アプリケーションを使用して、グラフ・サーバー(PGX)にロードされたグラフまたはデータベースに格納されているグラフを視覚化できます。

インストール用のグラフ・ビジュアライゼーション・アプリケーションを実行するには、グラフ・ビジュアライゼーションWebクライアントの実行を参照してください。

12.4 Jupyter Notebookインタフェースの使用

Jupyter Notebookインタフェースを使用して、Pythonを介してPGQLプロパティ・グラフを作成、ロードおよび問合せできます。

Jupyter Notebookを使用してグラフ分析を実行するには、次のステップを実行します:
  1. Jupyterのドキュメントに従って、Jupyter Notebookアプリケーションをインストールします。次の例では、pipを使用してJupyterをインストールします:
    pip3 install --user jupyter
  2. JupyterインストールがPATH環境変数に追加されていることを確認します。
  3. jupyter notebookコマンドを使用してノートブック・サーバーを実行します。
  4. 生成されたURLを使用してWebアプリケーションを起動し、新しいノートブックを開きます。
  5. プロパティ・グラフを作成して分析します。

12.5 PGQLプロパティ・グラフを問い合せるための追加のクライアント・ツール

データベースでPGQLプロパティ・グラフを操作する場合、サポートされている他のクライアント・ツールを使用できます。

12.5.1 Oracle SQLclの使用

SQLclを使用して、データベースのグラフにアクセスできます。

Oracle Graph Server and Clientで使用可能なプラグインを使用して、SQLclでグラフに対してPGQL問合せを実行できます。詳細は、Oracle SQLclユーザーズ・ガイドSQLclのPGQLプラグインを参照してください。

この項の例は、SQLclでのグラフに対するPGQL問合せの実行を開始する際に役立ちます。前提条件として、この例のステップを実行するには、グラフ・サーバー・インストールで提供されるサンプル・データを使用して、データベース・スキーマで銀行グラフ・データを設定する必要があります。詳細は、グラフ分析のサンプル・データの使用を参照してください。

次の例では、PGQL文CREATE PROPERTY GRAPHを使用してPGQLプロパティ・グラフを作成し、このグラフに対してPGQL問合せを実行し、最後にSQLclを使用してグラフを削除します。

  1. データベース・スキーマ資格証明を使用してSQLclを起動します。次のコマンドでは、graphuserがSQLclへの接続に使用されるデータベース・ユーザーです。
    sql graphuser/<password_for_graphuser>@<tns_alias>
    
    SQLcl: Release 21.2 Production on Sun Jan 30 04:30:09 2022
    Copyright (c) 1982, 2022, Oracle.  All rights reserved.
    Connected to:
    Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
    Version 21.3.0.0.0
  2. 次のように、PGQLモードを有効にします。
    SQL> pgql auto on;
    
    PGQL Auto enabled for schema=[null], graph=[null], execute=[true], translate=[false]

    前述のPGQLコマンドでは引数が使用されないことに注意してください。

  3. 銀行グラフ・データ表でPGQLプロパティ・グラフを作成します。
    PGQL> CREATE PROPERTY GRAPH bank_graph
      2          VERTEX TABLES (
      3            bank_accounts
      4              LABEL ACCOUNTS
      5              PROPERTIES (ID, NAME)
      6          )
      7          EDGE TABLES (
      8            bank_txns
      9              SOURCE KEY (from_acct_id) REFERENCES bank_accounts (id)
     10              DESTINATION KEY (to_acct_id) REFERENCES bank_accounts (id)
     11              LABEL TRANSFERS
     12              PROPERTIES (FROM_ACCT_ID, TO_ACCT_ID, AMOUNT, DESCRIPTION)
     13*         ) OPTIONS(PG_VIEW);
    
    Graph created
  4. PGQLモードを有効にするときにgraph引数を使用して、bank_graphをデフォルト・グラフとして設定します。
    PGQL> pgql auto on graph bank_graph;
    
    PGQL Auto enabled for schema=[null], graph=[BANK_GRAPH], execute=[true], translate=[false]
    
  5. デフォルトのグラフに対してPGQL問合せを実行します。たとえば、次のPGQL問合せは、次に示すように頂点の合計数を取得します。
    PGQL> SELECT COUNT(*) AS num_vertices FROM MATCH(n);
    
       NUM_VERTICES
    _______________
               1000
    

    前述の問合せでは、MATCH句の一部としてON句を使用してグラフ名を指定していないことに注意してください。

  6. 別のスキーマ・ユーザーとしてSQLclに再接続します。
    PGQL> conn system/<password_for_system>@<tns_alias>;
    Connected.
  7. schema引数を使用してPGQLモードを有効にし、グラフの作成に使用するデフォルト・スキーマを設定します。また、graph引数を使用して、bank_graphをデフォルト・グラフとして設定します。
    PGQL> pgql auto on schema graphuser graph bank_graph;
    
    PGQL Auto enabled for schema=[graphuser], graph=[BANK_GRAPH], execute=[true], translate=[false]
  8. PGQL問合せを実行して、次のように、グラフ上のすべてのエッジ・プロパティを取得します。
    PGQL> SELECT e.* FROM MATCH (n:accounts) -[e:transfers]-> (m:accounts) LIMIT 10;
    
       AMOUNT    DESCRIPTION    FROM_ACCT_ID    TO_ACCT_ID
    _________ ______________ _______________ _____________
         1000 transfer                   178           921
         1000 transfer                   178           462
         1000 transfer                   179           688
         1000 transfer                   179           166
         1000 transfer                   179           397
         1000 transfer                   179           384
         1000 transfer                   179           900
         1000 transfer                   180           855
         1000 transfer                   180           984
         1000 transfer                   180           352
    
    10 rows selected.

    これにより、デフォルトのスキーマを設定し、SQLclのデフォルト・グラフに対してPGQL問合せを実行できます。

  9. 最後に、必要なグラフ問合せを実行した後にグラフを削除します。
    PGQL> DROP PROPERTY GRAPH bank_graph;
    
    Graph dropped
    

また、詳細は、SQLclでのPGQL問合せの実行を参照してください。

12.5.2 PGQLプロパティ・グラフを使用したSQL Developerの使用

SQL Developer 23.1を使用すると、「接続」ナビゲータの「プロパティ・グラフ」ノードの下にある「SQLプロパティ・グラフ」を展開して、データベース・スキーマに存在するすべてのPGQLプロパティ・グラフを表示できます。

図12-3 SQL DeveloperでのPGQLプロパティ・グラフ

図12-3の説明が続きます
「図12-3 SQL DeveloperでのPGQLプロパティ・グラフ」の説明

次のステップでは、SQL Developerを使用したPGQLプロパティ・グラフを操作するための例を示します。

  1. 「プロパティ・グラフ」ノードを右クリックし、「PGQLワークシートを開く」を選択します。
    PGQLワークシートが新しいタブで開き、次のアクションをサポートします。
    • 問合せの実行: 単一のPGQL問合せを実行する
    • スクリプトの実行: 複数のPGQL問合せを実行する
  2. PGQLワークシートでCREATE PROPERTY GRAPH文を実行して、PGQLプロパティ・グラフを作成します。たとえば:

    図12-4 PGQLプロパティ・グラフの作成

    図12-4の説明が続きます
    「図12-4 PGQLプロパティ・グラフの作成」の説明

    問合せ実行の結果は、エディタの下部ペインに表示されます。問合せが正常に実行されると、PGQLプロパティ・グラフ・オブジェクトを右クリックしてリフレッシュし、新しく作成されたグラフを「PGQLプロパティ・グラフ」に表示できます。

  3. 新しく作成されたグラフをクリックします。
    これにより、PGQLワークシートが新しいタブで開き、次のデフォルト問合せが表示されます。
    SELECT e, v, n FROM MATCH (v)-[e]-(n) ON <graph_name> LIMIT 100
  4. 1つ以上のPGQL問合せを実行します。
    たとえば、PGQL INSERTおよびSELECTの問合せの実行を次に示します。

    図12-5 複数のPGQL問合せの実行

    図12-5の説明が続きます
    「図12-5 複数のPGQL問合せの実行」の説明

    結果は「スクリプト出力」タブで確認できます。

  5. 次のように、PGQLプロパティ・グラフを削除します。

    図12-6 PGQLプロパティ・グラフの削除

    図12-6の説明が続きます
    「図12-6 PGQLプロパティ・グラフの削除」の説明

    グラフが削除されます。