1 プロパティ・グラフのサポートの概要

この章では、プロパティ・グラフ機能に対するOracle Graphサポートの概要について説明します。

1.1 Oracle Databaseのプロパティ・グラフ機能について

プロパティ・グラフ機能は、Oracle Databaseの高度なグラフ問合せ機能および分析機能を提供します。

この機能は、グラフ操作、索引付け、問合せ、検索およびインメモリー分析をサポートします。

1.2 プロパティ・グラフの前提条件

Oracle Databaseのプロパティ・グラフ機能を使用するための要件は次のとおりです。

  • このトピックで後述するように、Oracle Graph Server and Clientをインストールする必要があります。

    これは、Oracle Databaseのプロパティ・グラフ機能を使用するために必要で、Oracle Database 12.2以降でサポートされます。

  • AL16UTF16 (UTF8のかわり)がNLS_NCHAR_CHARACTERSETに指定されている。

    AL32UTF8 (UTF8)がデフォルトの文字セットであるが、AL16UTF16がNLS_NCHAR_CHARACTERSETである。

サブトピック:

Oracle Graph Server and Clientのダウンロード

Oracle Software Delivery CloudからOracle Graph Server and Clientをダウンロードできます。

表1-1に、Oracle Graph Server and Clientデプロイメントに含まれるすべてのファイルの概要を示します。

表1-1のファイル名に示されている<ver>は、ダウンロードされたOracle Graph Server and Clientのバージョンを反映しています。

表1-1 Oracle Graph Server and Clientデプロイメントのコンポーネント

ファイル コンポーネント 説明
oracle-graph-<ver>.rpm Oracle Graph Server Oracle Graph Serverをデプロイするためのrpmファイル。
oracle-graph-client-<ver>.zip Oracle Graph Client Oracle Graph Clientを含むzipファイル。
oracle-graph-zeppelin-interpreter-<ver>.zip Oracle Graph Apache Zeppelin Client Apache Zeppelinを使用してOracle Graphを操作するためのライブラリを含むzipファイル。
oracle-graph-hdfs-connector-<ver>.zip Oracle Graph HDFS Connector Oracle Graph ServerをApache Hadoop Distributed Filesystem (HDFS)に接続するためのライブラリを含むzipファイル。
oracle-graph-sqlcl-plugin-<ver>.zip Oracle Graph PGQL Plugin for SQLcl SQLclでPGQL問合せを実行するためのSQLcl用のプラグイン。
oracle-graph-webapps-<ver>.zip Oracle Graph Web Applications アプリケーション・サーバーにグラフ・サーバーをデプロイするための.warファイルを含むzipファイル。
oracle-graph-plsql-<ver>.zip Oracle Graph PL/SQL Patch PL/SQLパッケージを含むzipファイル。これらのパッケージを使用してデータベース内のPL/SQL Graphパッケージを更新することをお薦めします。手順は、READMEファイルに記載されています。

Oracle DatabaseでのPL/SQLパッケージのインストール

Oracle Graph Server and Client は、Oracle Database 12.2以降と連携して機能します。ただし、Oracle Graph Server and Clientのダウンロードに含まれる更新されたPL/SQLパッケージをインストールする必要があります。

  1. Oracle Graph Server and Clientの一部であるOracle Graph PL/SQL PatchコンポーネントをOracle Software Delivery Cloudからダウンロードします。
  2. ファイルoracle-graph-plsql-<ver>.zipを任意のディレクトリに解凍します。

    <ver>は、PL/SQL用のOracle Graph PL/SQL Patchのダウンロードされたバージョンを示します。

  3. PL/SQLパッケージをインストールします。
    1. 2つのディレクトリがあります。1つはOracle Database 18c以前のユーザー用、もう1つはOracle Database 19c以降のユーザー用です。DBA権限を持つデータベース・ユーザーとして、(使用しているデータベース・バージョンに一致する)適切なディレクトリのREADME.mdファイルの手順に従います。これは、グラフ機能を使用するすべてのPDBに対して実行する必要があります。次に例を示します。
      -- Connect as SYSDBA
      SQL> alter session set container=<YOUR_PDB_NAME>;
      SQL> @opgremov.sql
      SQL> @catopg.sql
  4. グラフを操作するためのデータベース・ユーザーをデータベースに作成します。
    1. DBA権限を持つデータベース・ユーザーとして、ユーザー<graphuser>を作成し、必要な権限を付与します。
      1. 3層アーキテクチャ(インメモリー・グラフ・サーバー(PGX)で実行されるグラフ問合せおよび分析)を使用する場合は、次のコマンドの説明に従って権限を付与します。
        SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO <graphuser>
      2. 2層アーキテクチャを使用し、データベースでグラフ問合せを実行する場合は、データベース・ユーザーに必要な権限の説明に従って権限を付与します。
        SQL> GRANT CREATE SESSION, ALTER SESSION, CREATE TABLE, CREATE PROCEDURE, CREATE TYPE, CREATE SEQUENCE, CREATE VIEW, CREATE TRIGGER TO <graphuser> 
    2. データベースの<graphuser>として、PL/SQLの更新が成功したことを確認します。
      SQL> connect <graphuser>/<password>
      SQL> select opg_apis.get_opg_version() from dual;
           -- Should return 20.4 if you are using 
           -- Graph Server and Client 20.4
  5. グラフを操作するためにステップ4で作成したデータベース・ユーザーに、適切なロール(GRAPH_DEVELOPERまたはGRAPH_ADMINISTRATOR)を付与します。

    ノート:

    
    SQL> GRANT GRAPH_DEVELOPER to <graphuser>
    SQL> GRANT GRAPH_ADMINISTRATOR to <adminuser>

グラフ・サーバーのインストール

Oracle Graph Serverは、個別のダウンロード可能パッケージとして入手でき、Oracle Databaseのプロパティ・グラフ機能を使用するために必要です。$ORACLE_HOME/md/property_graphで使用可能なライブラリは削除されるため、使用しないでください。

グラフ・サーバーをインストールする前提条件は次のとおりです。

グラフ・サーバーは、スタンドアロン、Oracle WebLogic ServerまたはApache Tomcatで実行できます。Oracle WebLogic ServerまたはApache Tomcatでグラフ・サーバーをデプロイする手順は、次を参照してください。

スタンドアロン・モードでグラフ・サーバーをインストールするインストール・ステップは、次のとおりです。
  1. rootユーザーとして、またはsudoを使用して、RPMコマンドライン・ユーティリティを使用してRPMファイルをインストールします。
    sudo rpm -i oracle-graph-<version>.rpm

    <version>は、ダウンロードしたバージョンを表します。(例: oracle-graph-20.4.0.0.0.x86_64.rpm)

    .rpmファイルはグラフ・サーバーです。

    ノート:

  2. rootとして、サーバー・インストールの使用を許可されているオペレーティング・システム・ユーザーを、オペレーティング・システム・グループoraclegraphに追加します。次に例を示します。
    usermod -a -G oraclegraph <graphuser>

    これによって、指定されたグラフ・ユーザーがグループoraclegraphに追加されます。

    この処理を有効にするには、<graphuser>がログアウトしてから再度ログインする必要があることに注意してください。

  3. <graphuser>として、データベース認証のためのグラフ・サーバーの準備のステップに従って/etc/oracle/graph下のファイルを変更し、サーバーを構成します。
  4. ユーザーの認証および認可の説明に従って、グラフ・サーバーに接続するデータベース・ユーザーに対して認証が有効になっていることを確認します。
  5. rootユーザーとして、またはsudoを使用して、次のコマンドを実行してPGXサーバーを起動します。
    sudo systemctl start pgx

これで、PGXサーバーでリクエストを受け入れる準備ができました。ログ・ファイルは、/var/log/oracle/graphにあります。

特定のユースケースでは、次のような追加のインストール操作が必要になります。

トランスポート層セキュリティの設定

グラフ・サーバーは、デフォルトで、トランスポート層セキュリティ(TLS)を使用した暗号化された接続のみを許可しますTLSでは、サーバーがクライアントにサーバー証明書を提示する必要があり、クライアントはその証明書の発行者を信頼するように構成されている必要があります。

Graph Server and Clientリリース21.1から、RPMファイルのインストールで自己署名証明書が/etc/oracle/graphに生成されるようになりました。この証明書は、デフォルトでTLSを有効にするためにサーバーで使用されます。自己署名証明書で開始できる場合、および接続がlocalhostのみである場合は、自己署名証明書を信頼するようにクライアントを構成するにスキップできます。

グラフ・サーバーを構成します

ノート:

Webアプリケーションのダウンロード・パッケージを使用してグラフ・サーバーをWebサーバーにデプロイする場合、このセクションは適用されません。TLSの構成方法の詳細は、Webサーバーのマニュアルを参照してください。

/etc/oracle/graph/server.confでファイルを編集し、サーバー証明書へのパスおよびサーバーの秘密キーをPEM形式で指定します。次に例を示します。

{
  "port": 7007,
  "enable_tls": true,
  "server_private_key": "/etc/oracle/graph/server_key.pem",
  "server_cert": "/etc/oracle/graph/server_certificate.pem",
  "enable_client_authentication": false,
  "working_dir": "/opt/oracle/graph/pgx/tmp_data"
}

サーバーを再起動します。

ノート:

  • 組織によって信頼されている認証局(CA)によって発行された証明書を使用する必要があります。CA証明書がない場合は、一時的に自己署名証明書を作成して開始できます。
  • 組織によって信頼されている有効な証明書を常に使用してください。本番環境では、自己署名証明書の使用はお薦めしません。

自己署名証明書の生成

次の例は、自己署名証明書を生成する方法を示しています。

cd /etc/oracle/graph
openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -subj "/C=US/ST=MyState/L=MyTown/O=MyOrganization/CN=ROOT" -keyout ca_key.pem -out ca_certificate.pem
openssl genrsa -out server_key_traditional.pem 2048
openssl pkcs8 -topk8 -in server_key_traditional.pem -inform pem -out server_key.pem -outform pem -nocrypt
openssl req -new -subj "/C=US/ST=MyState/L=MyTown/O=MyOrganization/CN=localhost" -key server_key.pem -out server.csr
chmod 600 server_key.pem
openssl x509 -req -CA ca_certificate.pem -CAkey ca_key.pem -in server.csr -out server_certificate.pem -days 365 -CAcreateserial

ノート:

  • 前述の例に示されている証明書は、ホストlocalhostに対してのみ機能します。別のドメインを使用している場合は、localhostをそのドメイン名に置き換える必要があります。
  • 前述の自己署名証明書は365日間のみ有効です。

自己署名証明書を信頼するようにクライアントを構成する

Javaクライアント使用時の自己署名証明書の信頼

自己署名証明書を信頼するようにJavaクライアント(JShellを含む)を構成するには、ルート証明書をJavaインストールのローカル・トラスト・ストアにインポートする必要があります。したがって、JShellクライアントで使用されるJavaインストールにルート証明書をインポートする必要があります。

これを行うには、rootユーザーとして、またはsudoを指定して次のコマンドを実行し、JAVA_HOMEが設定されていることを確認します。

ノート:

JShellクライアントにはJava 11が必要です。
sudo keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -alias pgx -file /etc/oracle/graph/ca_certificate.pem -noprompt

ここで、changeitはサンプルのキーストア・パスワードです。このパスワードは任意のパスワードに変更できます。証明書を変更する際に必要になるため、このパスワードは忘れないでください。

グラフ・サーバーを以前のリリースからアップグレードする場合は、まずJavaのバージョンに適した次のコマンドを実行して証明書を削除する必要があります。このコマンドは、sudoを使用するか、rootユーザーとして実行する必要があります。

sudo keytool -delete -alias pgx -keystore $JAVA_HOME/jre/lib/security/cacerts

次に、新しい証明書をインポートします。

Pythonクライアント使用時の自己署名証明書の信頼

自己署名証明書を信頼するようにPythonクライアントを構成するには、Pythonアプリケーションを起動する前に、ルート証明書を指すSSL_CERT_FILE環境変数を設定する必要があります。

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

export SSL_CERT_FILE=/etc/oracle/graph/ca_certificate.pem

グラフ・ビジュアライゼーション・アプリケーション使用時の自己署名証明書の信頼

グラフ・ビジュアライゼーション・アプリケーションを使用して自己署名証明書を信頼する場合の構成ステップは、次のとおりです。

  1. グラフ・サーバー(PGX)で使用されるJavaインストールにルート証明書をインポートします。これを行うには、rootユーザーとして、またはsudoを指定して(Javaバージョンと一致する)次のコマンドを実行します。
    • Java 8 (JAVA_HOMEが設定されていることを確認します):
      sudo keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -alias pgx -file /etc/oracle/graph/ca_certificate.pem -noprompt
    • Java 11 (JAVA11_HOMEが設定されていることを確認します):
      sudo keytool -import -trustcacerts -keystore $JAVA11_HOME/lib/security/cacerts -storepass changeit -alias pgx -file /etc/oracle/graph/ca_certificate.pem -noprompt

    ここで、changeitはサンプルのキーストア・パスワードです。このパスワードは任意のパスワードに変更できます。証明書を変更する際に必要になるため、このパスワードは忘れないでください。

  2. グラフ・ビジュアライゼーション・アプリケーションを実行するためにブラウザに接続します。

    次のいずれかのメッセージが表示されることがあります。

    • Your connection is not private
    • Your connection is not secure
  3. 「続行」または「受入」ボタンをクリックして続行します。

グラフを公開する権限の追加

グラフ・サーバー・セッション内のグラフは、ブラウザでアクセスされるグラフ・ビジュアライゼーション・ツールで表示できるように公開する必要があります。そのセッションが別のセッションである可能性があるためです。次の文に示すように、データベースのGRAPH_DEVELOPERユーザーにPGX_SESSION_ADD_PUBLISHED_GRAPH権限を付与します。
GRANT PGX_SESSION_ADD_PUBLISHED_GRAPH TO GRAPH_DEVELOPER

ノート:

Graph Serverのアップグレード

グラフ・サーバーをアップグレードするには、グラフ・サーバーが停止していることを確認し、新しいRPMファイルを引数として、次のコマンドを実行します。このコマンドは、rootユーザーとして、またはsudoを使用して実行する必要があります。次に例を示します。

sudo rpm -U oracle-graph-20.2.0.0.0.x86_64.rpm

Graph Serverのアンインストール

グラフ・サーバーをアンインストールするには、グラフ・サーバーが停止していることを確認します。その後、rootユーザーとして、またはsudoを指定して次のコマンドを実行します。

sudo rpm -e oracle-graph

グラフ・クライアントのインストール

グラフ・クライアントをインストールする前提条件は次のとおりです。

  • Unixベースのオペレーション・システム(Linuxなど)またはmacOSやMicrosoft Windows
  • Oracle JDK 11
グラフ・クライアントの基本インストール・ステップは、次のとおりです。
  1. Oracle Software CloudからOracle Graph Client 20.1をダウンロードします。
  2. 選択したディレクトリに、このファイルを解凍します。
  3. JShellを使用してPGXサーバーに接続します。次に例を示します。
    cd
            <client-install-dir>./bin/opg-jshell --base_url https://<host>:7007

特定のユースケースでは、次のような追加のインストール操作が必要になります。

  • Apache Zeppelinにクライアントをインストールします。

データベースの互換性と制限事項

Oracle Graph Server and Client は、Oracle Database 12.2以降と連携して機能します。これには、Oracle Autonomous Databaseファミリ(すべてのバージョンのOracle Autonomous Data Warehouse (共有)、Oracle Autonomous Database (共有)およびOracle Autonomous Database (専用))の操作が含まれます。

対処するために実行する必要がある制限事項やアクションなどの詳細は、Database Compatibility Matrix for Oracle Graph Server and Clientを参照してください。

1.3 プロパティ・グラフ機能

グラフは頂点、エッジ、および頂点とエッジのプロパティとしてリンクされたデータのネットワークを管理します。

グラフは一般的に、ソーシャル・ネットワーク、サイバー・セキュリティ、ユーティリティおよび電気通信、ライフサイエンスおよび臨床データ、ナレッジ・ネットワークで検出される関係のモデル化、格納および分析に使用されます。

標準的なグラフ分析には、グラフのトラバース、推奨、コミュニティおよびインフルエンサの検出、パターン一致などがあります。グラフは、電気通信、ライフサイエンスおよびヘルスケア、セキュリティ、メディアおよび出版などの業種に活用できます。

Oracle Special and Graphのプロパティ・グラフ機能は、次の機能でこのようなユースケースをサポートしています。

  • スケーラブルなグラフ・データベース

  • PGQLに基づく開発者ベースのAPI、およびJavaグラフAPI

  • Oracle Textとの統合によるテキスト検索および問合せ

  • グラフ問合せおよびグラフ分析を実行するためのパラレルなインメモリー・グラフ・サーバー(PGX)

  • ランキング、中心性、レコメンダ、コミュニティ検出、パス検索など、高速でスケーラブルな一連のソーシャル・ネットワーク分析機能

  • Oracle定義のフラット・ファイル形式でのプロパティ・グラフ・データの並列バルク・ロードおよびエクスポート

  • 強力なグラフ・ビジュアライゼーション(GraphViz)アプリケーション

  • Apache Zeppelinとの統合によるノートブックのサポート

1.3.1 プロパティ・グラフのサイズ変更の推奨事項

プロパティ・グラフのインストールについての推奨事項を次に示します。

表1-2 プロパティ・グラフのサイズ変更の推奨事項

グラフのサイズ 推奨の専用物理メモリー 推奨のCPUプロセッサ数

10から100Mエッジ

14GB RAMまで

2から4プロセッサ、計算が集中するワークロードの場合は16プロセッサまで

100Mから1Bエッジ

14GBから100GB RAM

4から12プロセッサ、計算が集中するワークロードの場合は16から32プロセッサまで

1Bエッジ以上

100GB RAM以上

12から32プロセッサ、特に計算が集中するワークロードの場合はそれ以上

1.4 グラフ・データを使用したセキュリティのベスト・プラクティス

一部のセキュリティ関連のベスト・プラクティスは、グラフ・データを操作する場合に適用されます。

機密情報

グラフ・データには機密情報を含めることができるため、他のタイプのデータと同じように注意して取り扱う必要があります。Oracleでは、グラフ製品を使用する場合、次の考慮事項を検討することをお薦めします。

  • 分析に不要な場合は、機密情報をグラフに格納しないでください。既存のデータがある場合は、分析に必要な関連サブセットのみをグラフとしてモデル化します。このためには、前処理ステップを適用するか、グラフ製品の一部であるサブグラフとフィルタリング手法を使用します。
  • 頂点識別子およびエッジ識別子が機密情報とみなされないようにグラフをモデル化してください。
  • 信頼できない環境に製品をデプロイしたり、信頼できないクライアント接続へのアクセスを提供する方法で製品をデプロイしたりしないでください。
  • 信頼できるネットワーク内で実行されている場合であっても、すべての通信チャネルが暗号化されていること、および認証が常に有効になっていることを確認してください。

最小特権アカウント

データを読み取るためにインメモリー・アナリスト(PGX)が使用するデータベース・ユーザー・アカウントは、権限の低い読取り専用アカウントである必要があります。PGXは、データベースの上位で読取り専用キャッシュとして機能するインメモリー・アクセラレータで、データベースにデータを書き戻しません。

アプリケーションでグラフ・データを書き込み、後でPGXを使用して分析する必要がある場合は、各コンポーネントに2つの異なるデータベース・ユーザー・アカウントを必ず使用してください。

1.5 対話型グラフ・シェル

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

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

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

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

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

グラフ・シェルは、--base_urlパラメータで指定されたグラフ・サーバー(PGX)に接続します。--base_urlパラメータが指定されていない場合、グラフ・シェルはローカルPGXインスタンスを作成し、シェルと同じJVMでグラフ関数を実行します。詳細は、Oracle Databaseへのグラフの格納とメモリーへのグラフのロードを参照してください。

グラフ・シェルの起動

グラフ・シェルはJShellを使用します。つまり、シェルはJava 11以降で実行する必要があります。

インストール後、シェルの実行可能ファイルは、サーバーのインストール後は/opt/oracle/graph/binに、クライアントのインストール後は<CLIENT_INSTALL_DIR>/binにあります。グラフ・シェルを起動してグラフ・サーバー(PGX)に接続するには、端末で次のように入力します。

./bin/opg-jshell --base_url https://myserver.com:7007

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

opg-jshell>

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

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

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

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

./bin/opg-jshell --help

スクリプトのバッチ実行

グラフ・シェルは、スクリプトへのパスをopg-jshellコマンドに渡すことで、スクリプトを実行できます。次に例を示します。

./bin/opg-jshell /path/to/script.jsh

事前定義済関数

グラフ・シェルには次のユーティリティ機能があります。

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

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

スクリプト引数

スクリプトのパラメータは後から指定できます。次に例を示します。

./bin/opg-jshell /path/to/script.jsh script-arg-1 script-arg-2

この例では、スクリプト/path/to/script.jshscriptArgsシステム・プロパティを介して引数にアクセスできます。次に例を示します。

println(System.getProperty("scriptArgs"))// Prints: script-arg-1 script-arg-2

対話方式モードの維持

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

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

1.6 ライブラリとしてのグラフ・サーバー機能の使用

グラフ・サーバー(PGX)で使用可能なグラフ関数は、アプリケーションでライブラリとして使用できます。

このようなユースケースでは、対話型グラフ・シェルを埋込み(ローカル)モードで使用して開発およびテストを実行できます。つまり、ローカルPGXインスタンスが作成され、クライアントと同じJVMで実行されます。パラメータなしでシェルを起動すると、ローカルPGXインスタンスが起動され、埋込みモードで実行されます。

グラフ・シェルを起動してグラフ・サーバーを埋込みモードで使用することは、グラフ・サーバーのインストールで使用可能なグラフ・シェル実行可能ファイルでのみサポートされています。グラフ・シェルは次のコマンドを使用して起動できます。

cd /opt/oracle/graph/bin
./bin/opg-jshell

グラフ・シェルからのレスポンスを次に示します。

opg-jshell>
ローカルPGXインスタンスは、次を使用してPGX構成ファイルをロードしようとします。
/etc/oracle/graph/pgx.conf

構成ファイルの場所を変更するには、構成ファイルへのパスを後ろに付けて--pgx_confコマンドライン・オプションを渡します。

# start local PGX instance with custom config
./bin/opg-jshell --pgx_conf <path_to_pgx.conf>

1.7 Oracle Databaseへのグラフの格納とメモリーへのグラフのロード

2層モード(グラフ・クライアントはOracle Databaseに直接接続)または3層モード(グラフ・クライアントは中間層のグラフ・サーバー(PGX)に接続し、Oracle Databaseに接続)でグラフを操作できます。

Oracle Databaseに接続するための両方のモードは、データベースが自律型か非自律型かに関係なく使用できます。

グラフを格納するデータベース・スキーマには、「データベース・ユーザーに必要な権限」にリストされている権限が必要です。

Oracle Autonomous Databaseを使用している場合、2層および3層のデプロイメントの詳細は、「Autonomous DatabaseでのOracle Graphの使用」を参照してください。

1.7.1 2層モード

2層モードでは、クライアント・グラフ・アプリケーションがOracle Databaseに直接接続します。

グラフはプロパティ・グラフ・スキーマに格納されます(「Oracle Databaseのプロパティ・グラフ・スキーマ・オブジェクト」を参照)。

PGQL DDL文CREATE PROPERTY GRAPHを使用すると、データベース表からグラフを作成してプロパティ・グラフ・スキーマに格納できます。その後、JShellシェル、Javaアプリケーションまたはグラフ・ビジュアライゼーション・ツールから、このグラフにPGQL問合せを実行できます。

処理を高速化したり、分析APIを使用するために、グラフをプロパティ・グラフ・スキーマからグラフ・サーバーのメモリーにロードできます。

1.7.2 3層モード

3層モードでは、クライアントのグラフ・アプリケーションは中間層のグラフ・サーバー(PGX)に接続し、グラフ・サーバーがOracle Databaseに接続します。

グラフは、プロパティ・グラフ・スキーマからグラフ・サーバーにロードしたり、データベース表からグラフ・サーバーに直接ロードすることができます。

  • プロパティ・グラフ・スキーマからのグラフのロード:

    グラフ・サーバーでプロパティ・グラフ・スキーマからメモリーへのグラフのロードは、2層モードの場合と同じです。

  • データベース表からのグラフの直接ロード:

    グラフ・サーバーでデータベース表からメモリーにグラフをロードする場合は、データベース表からデータを直接読み込むことにより、メモリー内にグラフを作成します。プロパティ・グラフ・スキーマにはグラフを作成しません。

    データベース表からメモリーへのグラフのロードの詳細は、キーストアへのデータベース・パスワードの格納を参照してください。

グラフがメモリーにロードされたら、JShellシェル、Javaアプリケーションまたはグラフ・ビジュアライゼーション・ツールから、このグラフにPGQL問合せを実行できます。JShellシェルまたはJavaアプリケーションからグラフ分析APIを実行し、グラフ・ビジュアライゼーション(GraphViz)で結果を視覚化できます。

1.8 Autonomous DatabaseでのOracle Graphの使用

Oracle Graph Server and Clientは、Oracle Autonomous Databaseのファミリをサポートしています。

これには、すべてのバージョンのOracle Autonomous Data Warehouse (共有)、Oracle Autonomous Database (共有)およびOracle Autonomous Database (専用)が含まれます。

2層モード(Autonomous Databaseに直接接続)または3層モード(中間層のPGXに接続し、Autonomous Databaseに接続する)で接続できます。(2層および3層の接続モードの基本情報は、「Oracle Databaseへのグラフの格納とメモリーへのグラフのロード」を参照してください)。

グラフを格納するデータベース・スキーマには、「データベース・ユーザーに必要な権限」にリストされている権限が必要です。

1.8.1 Autonomous Databaseを使用したOracle Graphの2層デプロイメント

2層デプロイメントでは、クライアント・グラフ・アプリケーションがAutonomous Databaseに直接接続します。

  1. プロパティ・グラフの前提条件」で説明されているように、Oracle Graph Serverをインストールします。
  2. Oracle Autonomous Warehouseのドキュメントで説明されているように、JDBC接続を確立します。

    Oracle Graphサーバーのインストールには、Autonomous Databaseに接続するために必要なすべてのJDBCクライアント・ライブラリがすでに含まれています。自分でインストールする必要はありません。ウォレットをダウンロードし、セキュアな場所に解凍し、接続の確立時に参照するだけで済みます。

    次に例を示します。

    opg-jshell-rdbms> var jdbcUrl = "jdbc:oracle:thin:@db201901151442_low?TNS_ADMIN=/etc/wallet"
    opg-jshell-rdbms> var user = "hr"
    opg-jshell-rdbms> var pass = "ChangeMe1234#_"
    opg-jshell-rdbms> var conn = DriverManager.getConnection(jdbcUrl, user, pass)
    conn ==> oracle.jdbc.driver.T4CConnection@57e6cb01
    
  3. グラフ・アプリケーションの接続を使用します。

1.8.2 Autonomous Databaseを使用したOracle Graphの3層デプロイメント

3層デプロイメントでは、クライアント・グラフ・アプリケーションが中間層のPGXに接続し、PGXがAutonomous Databaseに接続します。

Oracle Cloudコンソールからダウンロードしたウォレットは、主にルーティング・ウォレットです。つまり、適切なデータベースに接続をルーティングしたり、接続を暗号化したりするために使用されます。ほとんどの場合、これらは自動ログイン・ウォレットではないため、実際の接続のパスワードは含まれません。通常、パスワードはウォレットの場所に個別に提供する必要があります。

グラフ・サーバーでは、クライアント・ファイル・システムに格納されているウォレットや、リモート・ユーザーが直接提供するウォレットはサポートされていません。これによって生じる高レベルでの影響は次のとおりです。

  • サーバー管理者はウォレットを提供して、サーバーのファイル・システムにウォレットを安全に格納します。
  • Java EE接続プールと同様に、リモート・ユーザーは接続時にそのウォレットを使用します。これは、サーバー管理者は、すべてのリモート・ユーザーがそのウォレットを使用すると信頼することを意味します。本番デプロイメントと同様に、PGXサーバーも、認証および認可を適用して信頼性を確立するように構成する必要があります。
  • リモート・ユーザーは依然として、非自律型データベースと同様に、グラフ読取りリクエストを送信するときにユーザー名とパスワードを指定する必要があります。
  • 各PGXサーバーには1つのウォレットのみ構成できます。

同じPGXサーバーを複数のAutonomous Databaseに接続することはサポートされていません。このユースケースがある場合、Autonomous Databaseごとに1つのPGXサーバーを起動します。

事前ロード済グラフ

サーバー起動時にAutonomous DatabaseからPGXにグラフを読み取るには、キーストアへのデータベース・パスワードの格納で説明されているステップに従います。

  1. データベース・パスワードを含むJavaキーストアを作成します
  2. ロードするグラフの場所およびプロパティを記述したPGXグラフ構成ファイルを作成します
  3. グラフ構成ファイルを参照するように/opt/oracle/graph/pgx.confファイルを更新します
rootユーザーとして、/etc/systemd/system/pgx.serviceにあるサービス・ファイルを編集し、[Service]ディレクティブの下に環境変数を指定します。
Environment="JAVA_OPTS=-Doracle.net.tns_admin=/etc/oracle/graph/wallets"

Oracle Graphユーザー(systemdの使用時にPGXサーバーを起動するユーザー)がディレクトリ(前のコードでは/etc/oracle/graph/wallets)を読取り可能なことを確認します。

また、ExecStartコマンドを編集して、パスワードを含むキーストアの場所を指定します。

ExecStart=/bin/bash start-server --secret-store /etc/keystore.p12

ノート:

これを機能させるため、/etc/keystore.p12をパスワードで保護しないでください。かわりに、oraclegraphユーザーのみが読取り可能なファイル・システム権限によってファイルを保護します。
ファイルを編集したら、次を使用して変更をリロードします。
systemctl daemon-reload
最後に、サーバーを起動します。
sudo systemctl start pgx

オンデマンド・グラフ・ロード

PGXのリモート・ユーザーが必要に応じてAutonomous Databaseから読み取ることができるようにするには、次の2つのアプローチから選択できます。

  • oracle.net.tns_adminシステム・プロパティを使用して、サーバー起動時にウォレットへのパスを提供します。リモート・ユーザーは、グラフ構成ファイルにTNSアドレス名、ユーザー名およびキーストア別名(パスワード)を提供する必要があります。ウォレットはグラフ・サーバーのファイル・システムに安全に格納され、サーバー管理者は、すべてのリモート・ユーザーがウォレットを使用してAutonomous Databaseに接続することを信頼します。

    たとえば、サーバー管理者は/etc/systemd/system/pgx.serviceにあるサービス・ファイルを編集し、[Service]ディレクティブの下に環境変数を指定します。

    Environment="JAVA_OPTS=-Doracle.net.tns_admin=/etc/oracle/graph/wallets"
    その後、次を使用してサーバーを起動します。
    systemctl start pgx

    /etc/oracle/graph/wallets/tnsnames.oraファイルには、次のようなアドレスが含まれています。

    sombrero_medium = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))(connect_data=(service_name=l8lgholga0ujxsa_sombrero_medium.adwc.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adwc.uscom-east-1.oraclecloud.com,OU=Oracle BMCS US,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

    これで、リモート・ユーザーは、次の接続プロパティを持つグラフ構成ファイルを送信することにより、サーバーにデータを読み込むことができます。

    {
      ...
      "jdbc_url": "jdbc:oracle:thin:@sombrero_medium",
      "username": "hr",
      "keystore_alias": "database1",
      ...
    }
    

    キーストアはクライアント側に引き続き存在し、構成オブジェクトで参照されるhrユーザーのパスワードを含んでいる必要があることに注意してください(キーストアへのデータベース・パスワードの格納を参照)。TomcatまたはWebLogic Serverデプロイメントにも同様のアプローチが適用されます。

  • Webアプリケーション・サーバーでJava EE接続プールを使用します。リモート・ユーザーは、グラフ構成ファイルにデータソース名を指定するだけで済みます。ウォレットおよび接続資格証明はWebアプリケーション・サーバーのファイル・システムに安全に格納され、サーバー管理者は、すべてのリモート・ユーザーがプールから接続を使用してAutonomous Databaseに接続することを信頼します。

    このようなデータ・ソースを設定する手順は、次の場所にあります。

    データソースにadb_dsという名前を付けた場合、次の接続プロパティを持つグラフ構成ファイルを送信してこれらを参照できます。

    {
      ...
      "datasource_id": "adb_ds",
      ...
    }
    

1.9 リリース21cより前からのプロパティ・グラフ・アプリケーションの移行

Oracle Spatial and Graphの前のバージョンからリリース21cに移行する場合、既存のプロパティ・グラフ関連のアプリケーションの変更が必要な場合があります。

また、プロパティ・グラフ・アプリケーションには、Oracle Graph Server and Clientが必要であることに注意してください。これは、Oracle Software Delivery CloudまたはOracle Downloadsページからダウンロードできます。

セキュリティ関連の変更

プロパティ・グラフ機能には、製品のプロパティ・グラフ・コンポーネントのセキュリティをさらに強化するための一連の拡張が含まれています。次の拡張機能では、既存のグラフ・アプリケーションを引き続き正しく動作させるために手動での変更が必要な場合があります。

  • グラフ構成ファイルでは、パスワードなどの機密情報をJavaキーストア・ファイルに格納することが必要になりました

    グラフ構成ファイルを使用する場合は、Javaキーストア・ファイルを使用してパスワードなどの機密情報を格納する必要があります。(このようなキーストアの作成および参照方法は、キーストアへのデータベース・パスワードの格納を参照してください。)

    シークレットを含む既存のすべてのグラフ構成ファイルを、キーストア・ベースの方式に移行する必要があります。

  • 3層デプロイメントでは、PGXサーバー・ファイル・システムへのアクセスにディレクトリ許可リストが必要です

    デフォルトでは、PGXサーバーはローカル・ファイル・システムへのリモート・アクセスを許可しません。ただし、これは、/etc/oracle/graph/pgx.confallow_local_filesystemtrueに設定すると、明示的に許可できます。allow_local_filesystemtrueに設定する場合、datasource_dir_whitelistを設定して、アクセスが許可されたディレクトリのリストも指定する必要があります。次に例を示します。

    "allow_local_filesystem": true,
    "datasource_dir_whitelist": ["/scratch/data1", "/scratch/data2"]

    これにより、リモート・ユーザーは、サーバーのファイルシステム上のデータを/scratch/data1および/scratch/data2で読み書きできるようになります。

  • 3層デプロイメントでは、リモートの場所からPGXへの読取りはデフォルトでは許可されなくなりました

    以前は、PGXでは、FTPまたはHTTPを介してリモートの場所からグラフ・データを読み取ることが許可されていました。これはデフォルトでは許可されなくなり、サーバー管理者が明示的にオプトインする必要があります。オプトインするには、/etc/oracle/graph/pgx.confallowed_remote_loading_locations構成オプションを指定します。次に例を示します。

    allowed_remote_loading_locations: ["*"]

    また、次のことに注意してください。

    • ftpおよびhttpプロトコルは、暗号化されていないために安全ではなく、データのロードまたは格納用としてサポートされなくなりました。
    • 構成ファイルはリモートの場所からロードできなくなりましたが、ローカル・ファイル・システムからロードする必要があります。
  • シェル・コマンドライン・オプションを削除しました

    Groovyベースのopgシェルの次のコマンドライン・オプションは削除されたため、機能しなくなります。

    • --attach - シェルは、コマンドラインを介した既存のセッションへの接続をサポートしなくなりました
    • --password - シェルは、パスワードを要求するようになりました

    また、Groovyベースのシェルは非推奨になったため、かわりに新しいJShellベースのシェルを使用することをお薦めします(「対話型グラフ・シェル」を参照)。

  • PGX APIの変更点

    次のAPIは、グラフ構成情報を返さなくなりました。

    • ServerInstance#getGraphInfo()
    • ServerInstance#getGraphInfos()
    • ServerInstance#getServerState()

    REST APIでは、コレクション、グラフおよびプロパティが名前ではなくUUIDで識別されるようになりました。

    グラフとプロパティのネームスペースは、デフォルトでセッションのプライベートになりました。このため、名前の競合が原因で以前は例外をスローしていた操作の一部が成功するようになりました。

    PgxGraph#publish()は、指定された名前のグラフが以前にパブリッシュされていた場合に例外をスローするようになりました。

新規データベース・バージョンへのデータの移行

Oracle Graph Server and Clientは、古いバージョンのデータベースで動作します。(詳細は、「プロパティ・グラフの前提条件」の「データベースの互換性と制限事項」サブトピックを参照してください)。アップグレードの一部としてOracle Databaseもアップグレードした場合は、アップグレード後にデータベースで次のヘルパー・スクリプトを起動することにより、Oracleプロパティ・グラフ形式を使用して格納された既存のグラフ・データを移行できます。

sqlplus> execute mdsys.opg.migrate_pg_to_current(graph_name=>'mygraph');

前の例では、プロパティ・グラフmygraphを現在のデータベース・バージョンに移行します。

プロパティ・グラフ・ライブラリの以前のバージョンのアンインストール

これは、Oracle Databaseバージョン12.2、18cまたは19cを使用している場合にのみ必要です。

Oracle Databaseのプロパティ・グラフ機能を使用するには、個別にインストールされたOracle Graph Server and Clientが必要になりました。Graph Server and Clientのインストールが完了し、前述の移行ステップ(必要な場合)を完了し、すべてが正常に機能していることを確認したら、次のアンインストール・ステップを実行して、Oracle Databaseインストールから古いグラフ・インストールのバイナリを削除することをお薦めします。

  1. プロパティ・グラフの中間層コンポーネントがターゲット・データベース・ホストで使用されていないことを確認してください。たとえば、$ORACLE_HOME/md/property_graphの下にあるファイルを使用するアプリケーションが実行されていないことを確認してください。このようなアプリケーションの例として、データベースと同じホスト上で実行されているPGXサーバーや、$ORACLE_HOME/md/property_graph/libの下にあるJARファイルを参照するクライアント・アプリケーションなどがあります。

    アンインストールを実行するためにデータベースを停止する必要はありません。Oracleデータベース自体は、$ORACLE_HOME/md/property_graphの下にあるファイルを参照または使用しません。

  2. データベース・ホストの$ORACLE_HOME/md/property_graphの下にあるファイルを削除します。Linuxでは、次のヘルパー・スクリプトをデータベース・ホストにコピーし、DBAオペレーティング・システム・ユーザーとして実行できます: /opt/oracle/graph/scripts/patch-opg-oracle-home.sh

1.10 Graph Server and Client 20.4.xから21.1.0へのアップグレード

Graph Server and Client 20.4.xから21.1.0バージョンにアップグレードする場合、データベースに新しいロールを作成し、pgx.confファイルからデータベースに認可ルールを移行する必要があることがあります。また、Graph Server and Clientリリース21.1.0からは、RPMファイルのインストール時にTLSが強制されます。

Graph Server and Clientリリース21.1.0の主な拡張機能の1つは、グラフのアクセス権限をpgx.confファイルからデータベースに移動することです。PL/SQLパッケージのインストール時に、デフォルトの権限を持つグラフ・ロールの新しいセットがデータベースに自動的に作成されます。デフォルト・マッピングの詳細は、付録の表C-1を参照してください。

この機能に準拠するには、次の項で説明するデータベース・アクションを実行する必要があります。

データベースでの追加のロールの作成

追加の権限を持つデータベース内のロールは、アップグレードの一環として21.1.0 PL/SQLパッケージをデータベースにインストールするときに作成されます。Autonomous Databaseを使用している場合など、PL/SQLパッケージをインストールできない場合、デフォルトの権限セットを使用してデータベースにこれらのロールを手動で作成する方法の詳細は、ユーザーの認証および認可を参照してください。

認可ルールの移行

21.1にアップグレードする場合、pgx.confファイルに含まれるユーザーが追加したマッピングに対してデータベースGRANTSを実行する必要があります。

次の例では、認可ルールの移行が適用される場合と適用されない場合の様々なシナリオについて説明します。

例1-1 ユーザーが追加したマッピングのデータベースへの移行

pgx.confファイルのユーザーが追加した次のマッピングを移行するには:

...
"authorization": [{
  "pgx_role": "GRAPH_DEVELOPER",
  "pgx_permissions": [{
    "grant": "PGX_SESSION_ADD_PUBLISHED_GRAPH"
  },
...
21.1.0で使用されるデータベースで次のGRANT文を実行する必要があります。
GRANT PGX_SESSION_ADD_PUBLISHED_GRAPH TO GRAPH_DEVELOPER

例1-2 ユーザーが追加したファイル・システム認可ルールのデータベースへの移行

pgx.confファイルのユーザーが追加した次のファイル・システム認可ルールを移行するには:

...
"file_locations": [{
  "name": "my_hdfs_graph_data",
  "location": "hdfs:/data/graphs"
}],
"authorization": [{
  "pgx_role": "GRAPH_DEVELOPER",
  "pgx_permissions": [{
    "file_location": "my_hdfs_graph_data",
    "grant": "read"  
  },
...
21.1.0で使用されるデータベースで次のGRANT文を実行する必要があります。

CREATE OR REPLACE DIRECTORY my_hdfs_graph_data AS 'hdfs:/data/graphs'
GRANT READ ON DIRECTORY my_hdfs_graph_data TO GRAPH_DEVELOPER

例1-3 事前ロード済グラフに対するユーザーが追加したグラフ認可ルール

ノート:

事前ロード済グラフに対するユーザーが追加したグラフ認可ルールには移行は必要ありません

事前ロード済グラフに対するユーザーが追加したグラフ認可ルールは、引き続きpgx.confファイルで構成されるため、移行しないでください(次のコードを参照)。


"preload_graphs": [{
  "path": "/data/my-graph.json",
  "name": "global_graph"
}],
"authorization": [{
  "pgx_role": "GRAPH_DEVELOPER",
  "pgx_permissions": [{
    "preloaded_graph": "global_graph",
    "grant": "read"
  },
...

RPMのインストール時に自己署名TLS証明書が生成されるようになりました

Graph Server and Client 21.1では、RPMのインストールで自己署名証明書が/etc/oracle/graphに生成されるようになりました。この証明書は、デフォルトでTLSを有効にするためにサーバーで使用されます。

セキュリティのベスト・プラクティスに従って、証明書へのアクセスはoraclegraphオペレーティング・システム・ユーザーに制限されます。これは、ユーザーがoraclegraphグループに含まれている場合でも、/opt/oracle/graph/pgx/bin/start-serverスクリプトを使用してグラフ・サーバーを起動できなくなることを意味します。かわりに、systemctlコマンドを使用してグラフ・サーバーのライフサイクルを管理します。次に例を示します。
sudo systemctl start pgx
次に示すように、証明書の所有権を変更する方法もあります。
sudo chown <youruser> /etc/oracle/graph/server_key.pem
TLSをオフにすると接続のセキュリティが低下するため、TLSをオフにすることはお薦めしません。ただし、その必要がある場合は、詳細についてグラフ・サーバーでのトランスポート層セキュリティ(TLS)の無効化を参照してください。

1.11 クイック・スタート: グラフ・データの対話的分析

このチュートリアルでは、プロパティ・グラフ・データを使用してすばやく開始する方法を示します。

次の方法について学習します。

  • 既存のリレーショナル・データをグラフに変換します。
  • PGQLを使用してそのデータを問い合せます。
  • そのデータおよび表示結果についてグラフ・アルゴリズムを実行します。

このセクションのチュートリアルは次のとおりです。

1.11.1 クイック・スタート: インメモリー・グラフ・サーバー(PGX)でのグラフの作成、問合せおよび分析

このチュートリアルでは、インメモリー・グラフ・サーバー(PGX)の使用時にプロパティ・グラフ・データの使用をすばやく開始する方法を示します。

これは、インメモリー・グラフ・サーバー(PGX)セッションがアクティブであるかぎりグラフを使用できるユースケース用です。グラフはデータベース内に永続化されません。

  • 既存のリレーショナル・データから直接、インメモリー・グラフ・サーバー(PGX)にグラフを作成します
  • インメモリー・グラフ・サーバー(PGX)でPGQLを使用してこのグラフを問い合せます
  • このグラフのインメモリー・グラフ・サーバー(PGX)でグラフ・アルゴリズムを実行し、結果を表示します
次のクイック・スタートの前提条件は、次のとおりです。
  • Oracle Graphサーバーのインストール(これがPGX、インメモリー・グラフ・サーバーです)。

    Oracle Graph Server and Clientのダウンロードの詳細は、プロパティ・グラフの前提条件を参照してください。

  • Oracle Graphクライアントのインストール。

    インメモリー・グラフ・サーバーに対してデータベース・ユーザーとして自分自身を認証し、これらのデータベース資格証明を使用してデータベース表にアクセスし、グラフを作成します。

  • Java 11
    • インメモリー・グラフ・サーバーは、Java 8またはJava 11と連携できます。
    • この例で使用するJShellクライアントには、Java 11が必要です。

    Javaのダウンロードについては、https://www.oracle.com/technetwork/java/javase/overview/index.htmlを参照してください。

サンプル・データの設定

この例では、HR (人事)サンプル・データセットを使用します。

グラフを格納するデータベース・スキーマには、「データベース・ユーザーに必要な権限」にリストされている権限が必要になることに注意してください。

シェルの起動

Oracle Graphクライアントがインストールされているシステムで、次のようにシェルを起動します。これは、リモート・モードでシェルを起動し、インメモリー・グラフ・サーバー(PGX)に接続する例です。

./bin/opg-jshell --base_url https://<graph server host>:7007 --username <graphuser>

<graphuser>は、PGXサーバー認証に使用するデータベース・ユーザーです。データベース・パスワードの入力を要求されます。

ノート:

デモ目的でのみ、/etc/oracle/graph/server.confファイルでenable_tlsfalseに設定した場合にはhttps接続のかわりにhttpを使用できます。
./bin/opg-jshell --base_url http://<graph server host>:7007 --username <graphuser>

これによりシェルが起動し、グラフ・サーバーに接続します。

シェルを起動する前に、JAVA_HOMEをJava 11に設定する必要があることに注意してください。次に例を示します。
export JAVA_HOME=/usr/lib/jvm/java-11-oracle

シェルの詳細は、対話型グラフ・シェルを参照してください。

グラフ作成文の作成および実行

CREATE PROPERTY GRAPH文を実行して、従業員、部門および"employee works at department"を含むグラフを作成します。次の文は、インメモリー・グラフ・サーバー(PGX)にグラフを作成します。
opg-jshell> String statement =
      "CREATE PROPERTY GRAPH hr_simplified "
    + "  VERTEX TABLES ( "
    + "    hr.employees LABEL employee "
    + "      PROPERTIES ARE ALL COLUMNS EXCEPT ( job_id, manager_id, department_id ), "
    + "    hr.departments LABEL department "
    + "      PROPERTIES ( department_id, department_name ) "
    + "  ) "
    + "  EDGE TABLES ( "
    + "    hr.employees AS works_at "
    + "      SOURCE KEY ( employee_id ) REFERENCES employees "
    + "      DESTINATION departments "
    + "      PROPERTIES ( employee_id ) "
    + "  )";
opg-jshell> session.executePgql(statement);
グラフへのハンドルを取得するには、次を実行します。
opg-jshell> PgxGraph g = session.getGraph("HR_SIMPLIFIED");

いくつかのPGQL問合せの実行

このハンドルを使用して、このグラフでPGQL問合せを実行できます。たとえば、Nandita Sarchandが勤務する部門を検索するには、次のように実行します。
opg-jshell> String query =
    "SELECT dep.department_name "
  + "FROM MATCH (emp:Employee) -[:works_at]-> (dep:Department) "
  + "WHERE emp.first_name = 'Nandita' AND emp.last_name = 'Sarchand' "
  + "ORDER BY 1";
opg-jshell> PgqlResultSet resultSet = g.queryPgql(query);
opg-jshell> resultSet.print();
+-----------------+
| department_name |
+-----------------+
| Shipping        |
+-----------------+
頂点のタイプとその頻度の概要を取得するには、次のコマンドを実行します。
opg-jshell> String query =
      "SELECT label(n), COUNT(*) "
    + "FROM MATCH (n) "
    + "GROUP BY label(n) "
    + "ORDER BY COUNT(*) DESC";
opg-jshell> PgqlResultSet resultSet = g.queryPgql(query);
opg-jshell> resultSet.print();

+-----------------------+
| label(n)   | COUNT(*) |
+-----------------------+
| EMPLOYEE   | 107      |
| DEPARTMENT | 27       |
+-----------------------+

エッジのタイプとその頻度の概要を取得するには、次のコマンドを実行します。

opg-jshell> String query =
    "SELECT label(n) AS srcLbl, label(e) AS edgeLbl, label(m) AS dstLbl, COUNT(*) "
  + "FROM MATCH (n) -[e]-> (m) "
  + "GROUP BY srcLbl, edgeLbl, dstLbl "
  + "ORDER BY COUNT(*) DESC";
opg-jshell> PgqlResultSet resultSet = g.queryPgql(query);
opg-jshell> resultSet.print();

+---------------------------------------------+
| srcLbl   | edgeLbl  | dstLbl     | COUNT(*) |
+---------------------------------------------+
| EMPLOYEE | WORKS_AT | DEPARTMENT | 106      |
+---------------------------------------------+

アルゴリズムの実行およびアルゴリズム結果の問合せ

メモリー内にグラフがあるので、単一のAPI呼出しを使用して各組込みアルゴリズムを実行できます。たとえば、pagerankの場合は次のようになります。
opg-jshell> analyst.pagerank(g)
$31==> VertexProperty[name=pagerank,type=double,graph=hr]
前述の出力からわかるように、各アルゴリズムにより、アルゴリズムの出力を保持するグラフに新しい頂点プロパティが作成されました。グラフ内で最も重要な人々を(pagerankに応じて)印刷するには、次の問合せを実行します。
opg-jshell> session.queryPgql("select m.FIRST_NAME, m.LAST_NAME, m.pagerank from HR_SIMPLIFIED match (m:EMPLOYEE) where m.FIRST_NAME = ‘Nandita’ “).print().close()
+---------------------------------------------------+
| m.FIRST_NAME | m.LAST_NAME | m.pagerank           |
+---------------------------------------------------+
| Nandita      | Sarchand    | 0.001119402985074627 |
+---------------------------------------------------+

次の例では、部門をそのpagerank値で順序付けします。pagerankの値が高い部門ほど、従業員が多くなります。

opg-jshell> session.queryPgql("select m.DEPARTMENT_NAME, m.pagerank from HR_SIMPLIFIED match (m:DEPARTMENT) order by m.pagerank ").print().close();


+----------------------------------------------+
| m.DEPARTMENT_NAME | m.pagerank |
+----------------------------------------------+
| Manufacturing | 0.001119402985074627 |
| Construction | 0.001119402985074627 |
| Contracting | 0.001119402985074627 |
| Operations | 0.001119402985074627 |
| IT Support | 0.001119402985074627 |
| NOC | 0.001119402985074627 |
| IT Helpdesk | 0.001119402985074627 |
| Government Sales | 0.001119402985074627 |
| Retail Sales | 0.001119402985074627 |
| Recruiting | 0.001119402985074627 |
| Payroll | 0.001119402985074627 |
| Treasury | 0.001119402985074627 |
| Corporate Tax | 0.001119402985074627 |
| Control And Credit | 0.001119402985074627 |
| Shareholder Services | 0.001119402985074627 |
| Benefits | 0.001119402985074627 |
| Human Resources | 0.0020708955223880596 |
| Administration | 0.0020708955223880596 |
| Public Relations | 0.0020708955223880596 |
| Marketing | 0.003022388059701493 |
| Accounting | 0.003022388059701493 |
| Executive | 0.003973880597014925 |
| IT | 0.005876865671641792 |
| Purchasing | 0.006828358208955224 |
| Finance | 0.006828358208955224 |
| Sales | 0.03347014925373134 |
| Shipping | 0.043936567164179076 |
+----------------------------------------------+

他のセッションとのグラフの共有

グラフをサーバーにロードした後、publish() APIを使用して、グラフ・ビジュアライゼーション・セッションなどの他のセッションでグラフを表示できます。次に例を示します。
opg-jshell> graph.publish(VertexProperty.ALL, EdgeProperty.ALL)

公開されたグラフには、pagerankなどの関数をコールしてグラフに追加した、新しいプロパティがすべて含まれます。

ログインしているユーザーに、グラフを公開する権限があることを確認します。これを行うには、「グラフを公開する権限の追加」で説明されているように、権限PGX_SESSION_ADD_PUBLISHED_GRAPHGRAPH_DEVELOPERロールに追加します。「Oracle DatabaseでのPL/SQLパッケージのインストール」で、データベース・ユーザーにGRAPH_DEVELOPERロールを付与しました。

グラフ・ビジュアライゼーション・アプリケーションは、ブラウザで<my-server-name>:7007/ui/に移動すると使用できます。

グラフ・ビジュアライゼーション・アプリケーションへのログイン時にセッションIDを指定することで、特定のクライアント・セッションに接続できます。公開されていない場合でも、セッション内のすべてのグラフを視覚化できます。

opg-jshell> session
session ==> PgxSession[ID=5adf83ab-31b1-4a0e-8c08-d6a95ba63ee0,source=pgxShell]

セッションIDは5adf83ab-31b1-4a0e-8c08-d6a95ba63ee0です。

ノート:

グラフ・ビジュアライゼーション・アプリケーションからインメモリー・グラフ・サーバー(PGX)に接続するには、サーバー証明書を作成する必要があります。詳細は、トランスポート層セキュリティの設定を参照してください。

1.11.2 クイック・スタート: データベースでのグラフの作成と問合せ、および分析のためのインメモリー・グラフ・サーバー(PGX)へのロード

Section 1.9.2.1で、このチュートリアルは、グラフを作成してデータベースに永続化するときに、プロパティ・グラフ・データの使用を開始する方法を示しています。グラフはデータベースで問い合せることができます。このチュートリアルでは、JShellクライアントを使用します。

  • 既存のリレーショナル・データをデータベース内のグラフに変換します。
  • PGQLを使用してこのグラフを問い合せます。
Section 1.9.2.2では、グラフをインメモリー・グラフ・サーバー(PGX)にロードした後にグラフ・アルゴリズムを実行します。
  • グラフをインメモリー・グラフ・サーバー(PGX)にロードし、このグラフでグラフ・アルゴリズムを実行して、結果を視覚化します。
次のクイック・スタートの前提条件は、次のとおりです。
  • Oracle Graphサーバーのインストール(これがPGX、インメモリー・グラフ・サーバーです)。

    Oracle Graph Server and Clientのダウンロードの詳細は、プロパティ・グラフの前提条件を参照してください。

  • Oracle Graphクライアントのインストール
  • Java 11
    • インメモリー・グラフ・サーバーは、Java 8またはJava 11と連携できます。
    • この例で使用するJShellクライアントには、Java 11が必要です。

    Javaのダウンロードについては、https://www.oracle.com/technetwork/java/javase/overview/index.htmlを参照してください。

  • 接続がOracle Databaseの詳細を示しています。制限を確認するには、データベースの互換性および制限を参照してください。プロパティ・グラフ機能は、Oracle Databaseバージョン12.2以降でサポートされています。
  • Oracle Databaseでコマンドを実行する方法(SQL*PlusSQL Developerの使用など)に関する基本的な知識です。

サンプル・データの設定

この例では、HR (人事)サンプル・データセットを使用します。

グラフを格納するデータベース・スキーマには、「データベース・ユーザーに必要な権限」にリストされている権限が必要になることに注意してください。

1.11.2.1 データベースでのグラフの作成および問合せ

このセクションでは、Oracle Graphクライアントを使用してリレーショナル表からグラフを作成し、データベースのプロパティ・グラフ・スキーマに格納します。

シェルの起動

Oracle Graphクライアントがインストールされているシステムで、次のようにしてシェルを起動します。
cd <client-install-dir>
./bin/opg-jshell --noconnect 

<graphuser>は、PGXサーバー認証に使用するデータベース・ユーザーです。データベース・パスワードの入力を要求されます。

--noconnectオプションは、インメモリー・グラフ・サーバー(PGX)に接続していないことを示します。この例では、データベースにのみ接続します。

シェルを起動する前に、JAVA_HOMEをJava 11に設定する必要があることに注意してください。次に例を示します。
export JAVA_HOME=/usr/lib/jvm/java-11-oracle

シェルの詳細は、対話型グラフ・シェルを参照してください。

JDBCデータベース接続を開く

シェル・プロンプト内で、標準のJDBC Java APIを使用して、データベース接続オブジェクトを取得します。次に例を示します。
opg-jshell> var jdbcUrl = "<jdbc-url>" // for example: jdbc:oracle:thin:@myhost:1521/myservice
opg-jshell> var user = "<db-user>" // for example: hr
opg-jshell> var pass = "<db-pass>"
opg-jshell> var conn = DriverManager.getConnection(jdbcUrl, user, pass)
conn ==> oracle.jdbc.driver.T4CConnection@57e6cb01

Autonomous Databaseへの接続も同様に機能します。ローカル・ウォレットを指すJDBC URLを指定します。例は、Autonomous DatabaseでのOracle Graphの使用を参照してください。

PGQL接続の作成

JDBC接続をPGQL接続オブジェクトに変換します。次に例を示します。
opg-jshell> conn.setAutoCommit(false)
opg-jshell> var pgql = PgqlConnection.getConnection(conn)
pgql ==> oracle.pg.rdbms.pgql.PgqlConnection@6fb3d3bb

グラフ作成文の作成および実行

テキスト・エディタを使用して、HRサンプル・データをグラフに変換する方法を記述するCREATE PROPERTY GRAPH文を作成します。このファイルをcreate.pgqlとして任意の場所に保存します。次に例を示します。
CREATE PROPERTY GRAPH hr
  VERTEX TABLES (
    employees LABEL employee
      PROPERTIES ARE ALL COLUMNS EXCEPT ( job_id, manager_id, department_id ),
    departments LABEL department
      PROPERTIES ( department_id, department_name ),
    jobs LABEL job
      PROPERTIES ARE ALL COLUMNS,
    job_history
      PROPERTIES ( start_date, end_date ),
    locations LABEL location
      PROPERTIES ARE ALL COLUMNS EXCEPT ( country_id ),
    countries LABEL country
      PROPERTIES ARE ALL COLUMNS EXCEPT ( region_id ),
    regions LABEL region
  )
  EDGE TABLES (
    employees AS works_for
      SOURCE employees
      DESTINATION KEY ( manager_id ) REFERENCES employees
      NO PROPERTIES,
    employees AS works_at
      SOURCE employees
      DESTINATION departments
      NO PROPERTIES,
    employees AS works_as
      SOURCE employees
      DESTINATION jobs
      NO PROPERTIES,
    departments AS managed_by
      SOURCE departments
      DESTINATION employees
      NO PROPERTIES,
    job_history AS for_employee
      SOURCE job_history
      DESTINATION employees
      LABEL for
      NO PROPERTIES,
    job_history AS for_department
      SOURCE job_history
      DESTINATION departments
      LABEL for
      NO PROPERTIES,
    job_history AS for_job
      SOURCE job_history
      DESTINATION jobs
      LABEL for
      NO PROPERTIES,
    departments AS department_located_in
      SOURCE departments
      DESTINATION locations
      LABEL located_in
      NO PROPERTIES,
    locations AS location_located_in
      SOURCE locations
      DESTINATION countries
      LABEL located_in
      NO PROPERTIES,
    countries AS country_located_in
      SOURCE countries
      DESTINATION regions
      LABEL located_in
      NO PROPERTIES
  )
次に、グラフ・シェルに戻り、CREATE PROPERTY GRAPH文をPGQL接続に送信して実行します。<path>を、create.pgqlファイルを含むディレクトリのパスに置き換えます。
opg-jshell> pgql.prepareStatement(Files.readString(Paths.get("<path>/create.pgql"))).execute()
$16 ==> false

いくつかのPGQL問合せの実行

これで、hrというグラフが作成されたので、PGQLを使用して、データベース上で直接そのグラフに対していくつかの問合せを実行できます。次に例を示します。
// define a little helper function that executes the query, prints the results and properly closes the statement
opg-jshell> Consumer<String> query = q -> { try(var s = pgql.prepareStatement(q)) { s.execute(); s.getResultSet().print(); } catch(Exception e) { throw new RuntimeException(e); } }
query ==> $Lambda$605/0x0000000100ae6440@6c9e7af2
 
// print the number of vertices in the graph
opg-jshell> query.accept("select count(v) from hr match (v)")
+----------+
| count(v) |
+----------+
| 215      |
+----------+
 
// print the number of edges in the graph
opg-jshell> query.accept("select count(e) from hr match ()-[e]->()")
+----------+
| count(e) |
+----------+
| 433      |
+----------+
 
// find the highest earning managers
opg-jshell> query.accept("select distinct m.FIRST_NAME, m.LAST_NAME, m.SALARY from hr match (v:EMPLOYEE)-[:WORKS_FOR]->(m:EMPLOYEE) order by m.SALARY desc")
+---------------------------------------+
| m.FIRST_NAME | m.LAST_NAME | m.SALARY |
+---------------------------------------+
| Steven       | King        | 24000.0  |
| Lex          | De Haan     | 17000.0  |
| Neena        | Kochhar     | 17000.0  |
| John         | Russell     | 14000.0  |
| Karen        | Partners    | 13500.0  |
| Michael      | Hartstein   | 13000.0  |
| Alberto      | Errazuriz   | 12000.0  |
| Shelley      | Higgins     | 12000.0  |
| Nancy        | Greenberg   | 12000.0  |
| Den          | Raphaely    | 11000.0  |
| Gerald       | Cambrault   | 11000.0  |
| Eleni        | Zlotkey     | 10500.0  |
| Alexander    | Hunold      | 9000.0   |
| Adam         | Fripp       | 8200.0   |
| Matthew      | Weiss       | 8000.0   |
| Payam        | Kaufling    | 7900.0   |
| Shanta       | Vollman     | 6500.0   |
| Kevin        | Mourgos     | 5800.0   |
+---------------------------------------+
 
// find the average salary of accountants in the Americas
opg-jshell> query.accept("select avg(e.SALARY) from hr match (e:EMPLOYEE) -[h:WORKS_AT]-> (d:DEPARTMENT) -[:LOCATED_IN]-> (:LOCATION) -[:LOCATED_IN]-> (:COUNTRY) -[:LOCATED_IN]-> (r:REGION) where r.REGION_NAME = 'Americas' and d.DEPARTMENT_NAME = 'Accounting'")
+---------------+
| avg(e.SALARY) |
+---------------+
| 14500.0       |
+---------------+
1.11.2.2 メモリーへのグラフのロードおよびグラフ分析の実行

プロパティ・グラフ・スキーマからメモリーへのグラフのロード

クイック・スタートのこのセクションでは、データベースのプロパティ・グラフ・スキーマに格納されているグラフをインメモリー・グラフ・サーバー(PGX)にロードします。これにより、様々な種類の組込みアルゴリズムをグラフで実行できるようになり、より大きなグラフの問合せパフォーマンスも改善されます。

最初に、JShellクライアントを起動し、インメモリー・グラフ・サーバー(PGX)に接続します。
./bin/opg-jshell --base_url https://<graph server host>:7007 --username <graphuser>
<graphuser>は、PGXサーバー認証に使用するデータベース・ユーザーです。データベース・パスワードの入力を要求されます。

ノート:

デモ目的でのみ、/etc/oracle/graph/server.confファイルでenable_tlsfalseに設定した場合にはhttps接続のかわりにhttpを使用できます。
./bin/opg-jshell --base_url http://<graph server host>:7007 --username <graphuser>

これによりシェルが起動し、グラフ・サーバーに接続します。

ノート:

グラフ・データを使用したセキュリティのベスト・プラクティスで説明されているとおり、PGXには常に低権限の読取り専用データベース・ユーザー・アカウントを使用してください。

次に、このサーバーのメモリーにグラフをロードします。

グラフをメモリーにロードするには、PGXグラフ構成ビルダーAPIを使用してPGXグラフ構成オブジェクトを作成し、これをシェルで直接実行します。

次の例では、PGXグラフ構成オブジェクトを作成します。メモリーにロードするプロパティがリストされるため、他のプロパティを除外してメモリー消費を削減できます。
Supplier<GraphConfig> pgxConfig = () -> { return GraphConfigBuilder.forPropertyGraphRdbms()
.setName("hr")
 .addVertexProperty("COUNTRY_NAME", PropertyType.STRING)
 .addVertexProperty("DEPARTMENT_NAME", PropertyType.STRING)
 .addVertexProperty("FIRST_NAME", PropertyType.STRING)
 .addVertexProperty("LAST_NAME", PropertyType.STRING)
 .addVertexProperty("EMAIL", PropertyType.STRING)
 .addVertexProperty("PHONE_NUMBER", PropertyType.STRING)
 .addVertexProperty("SALARY", PropertyType.DOUBLE)
 .addVertexProperty("MIN_SALARY", PropertyType.DOUBLE)
 .addVertexProperty("MAX_SALARY", PropertyType.DOUBLE)
 .addVertexProperty("STREET_ADDRESS", PropertyType.STRING)
 .addVertexProperty("POSTAL_CODE", PropertyType.STRING)
 .addVertexProperty("CITY", PropertyType.STRING)
 .addVertexProperty("STATE_PROVINCE", PropertyType.STRING)
 .addVertexProperty("REGION_NAME", PropertyType.STRING)
 .setPartitionWhileLoading(PartitionWhileLoading.BY_LABEL)
 .setLoadVertexLabels(true)
 .setLoadEdgeLabel(true)
 .build(); }
グラフ構成オブジェクトが作成されたので、次のAPIを使用してグラフをPGXに読み取ります。
opg-jshell> var graph = session.readGraphWithProperties(pgxConfig.get())
graph ==> PgxGraph[name=hr,N=215,E=433,created=1586996113457]

セッション・オブジェクトが自動的に作成されます。

アルゴリズムの実行およびアルゴリズム結果の問合せ

グラフがメモリー内にあるので、単一のAPI呼出しを使用して任意の組込みアルゴリズムを実行できます。たとえば、pagerankの場合は次のようになります。
opg-jshell> analyst.pagerank(graph)
$31==> VertexProperty[name=pagerank,type=double,graph=hr]
前述の出力からわかるように、各アルゴリズムにより、アルゴリズムの出力を保持するグラフに新しい頂点プロパティが作成されました。グラフ内で最も重要な人々を(pagerankに応じて)印刷するには、次の問合せを実行します。
opg-jshell> session.queryPgql("select m.FIRST_NAME, m.LAST_NAME, m.pagerank from hr match (m:EMPLOYEE) order by m.pagerank desc limit 10").print().close()
+----------------------------------------------------+
| m.FIRST_NAME | m.LAST_NAME | m.pagerank |
+----------------------------------------------------+
| Adam | Fripp | 0.002959240305566317 |
| John | Russell | 0.0028810951120575284 |
| Michael | Hartstein | 0.002181365227465801 |
| Alexander | Hunold | 0.002082616009054747 |
| Den | Raphaely | 0.0020378615199327507 |
| Shelley | Higgins | 0.002028946863425767 |
| Nancy | Greenberg | 0.0017419394483596667 |
| Steven | King | 0.0016622985848193119 |
| Neena | Kochhar | 0.0015252785582170803 |
| Jennifer | Whalen | 0.0014263044976976823 |
+----------------------------------------------------+

他のセッションとのグラフの共有

グラフをインメモリー・サーバーにロードした後、publish() APIを使用して、グラフ・ビジュアライゼーション・セッションなどの他のセッションでグラフを表示できます。次に例を示します。
opg-jshell> graph.publish(VertexProperty.ALL, EdgeProperty.ALL)

公開されたグラフには、pagerankなどの関数をコールしてグラフに追加した、新しいプロパティがすべて含まれます。

グラフ・ビジュアライゼーション・アプリケーションは、ブラウザで<my-server-name>:7007/ui/に移動すると使用できます。

グラフ・ビジュアライゼーション・アプリケーションへのログイン時にセッションIDを指定することで、特定のクライアント・セッションに接続できます。公開されていない場合でも、セッション内のすべてのグラフを視覚化できます。

opg-jshell> session
session ==> PgxSession[ID=5adf83ab-31b1-4a0e-8c08-d6a95ba63ee0,source=pgxShell]

セッションIDは5adf83ab-31b1-4a0e-8c08-d6a95ba63ee0です。

ノート:

グラフ・ビジュアライゼーション・アプリケーションからインメモリー・グラフ・サーバー(PGX)に接続するには、サーバー証明書を作成する必要があります。詳細は、トランスポート層セキュリティの設定を参照してください。

1.11.3 クイック・スタート: SQLclでのPGQL問合せの実行

Oracle Graph Server and Clientで使用可能なプラグインを使用して、SQLclでPGQL問合せを実行できます。

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

SQLclドキュメントのSQLcl用PGQLプラグインのセクションも参照してください。

1.12 Pythonクライアントを使用したプロパティ・グラフの管理

このセクションでは、Pythonクライアントのインストール方法と、Pythonクライアントを使用してプロパティ・グラフを操作する方法について説明します。

1.12.1 Pythonクライアントのインストール

Pythonクライアントをインストールする前に、次のソフトウェアがシステムにインストールされていることを確認します。
  • Oracle JDK 8以上
  • Python 3.5以降

ノート:

Python 2.xはサポートされていません。

Oracle LinuxでのPython 3のインストールの詳細は、Python for Oracle Linuxを参照してください。

Pythonクライアントをインストールするには:

  1. Oracle Graph Clientのzipファイルをダウンロードします。
    たとえば、oracle-graph-client-20.4.0.zipです。
  2. pipを使用してクライアントをインストールします。
    次に例を示します。
    pip3 --user install oracle-graph-client-20.4.0.zip

1.12.2 Pythonクライアントの使用

Pythonクライアントは、(Pythonシェルを介して)対話型モードで、またはPythonプログラムで使用されるモジュールとして使用できます。

これらの2つのモードのいずれかで、別のホスト(リモート・サーバー)またはクライアント・プロセス(埋込みサーバー)で実行されているグラフ・サーバーに接続できます。

1.12.2.1 Pythonシェルを使用した対話型モード

このセクションでは、Pythonシェルを使用して対話形式でPythonクライアントを使用する方法について説明します。

埋込みサーバー

Pythonクライアントは埋込みモードで使用できます。つまり、グラフ・サーバーはクライアント・プロセス内でライブラリとして実行されています。

ノート:

このモードでは、PythonクライアントとGraph Server RPMパッケージを同じマシンにインストールする必要があります。
  1. Pythonシェルを起動します。
    cd /opt/oracle/graph/
    ./bin/opgpy
  2. シェルの実行中は、画面に次のプロンプトが表示されます。
    Oracle Graph Server Shell 20.4.0
    >>>

リモート・サーバー

次の手順に従って、Pythonクライアントを使用して、実行中のグラフ・サーバー・インスタンスに接続できます。

  1. クライアント・パッケージを解凍します。
    unzip oracle-graph-client-20.4.0.zip
    cd oracle-graph-client-20.4.0
  2. 次のいずれかのコマンドを実行して、シェルを起動します。
    1. ログイン資格証明を使用してhttps://localhost:7007にあるPGXサーバー・インスタンスに接続するには:
      ./bin/opgpy --base_url https://localhost:7007 --username scott

      パスワードを入力するように求められます。

    2. グラフ・サーバーに対する既存の認証トークンがある場合は、次の手順を実行してグラフ・サーバーに接続します。
      ./bin/opgpy --base_url https://localhost:7007

      認証トークンの入力を求めるプロンプトが表示されます。

    3. クライアント・シェルを起動し、グラフ・サーバーへの接続を確立しないようにするには:
      ./bin/opgpy --no_connect
  3. シェルの実行中は、画面に次のように表示されます。
    Oracle Graph Client Shell 20.4.0
    >>>

シェルの例

シェルが正常に起動した後、次の例に示すように、変数session、instance、analystはすでに事前定義されて、使用する準備ができています。

Oracle Graph Server Shell 20.4.0
>>> instance
ServerInstance(embedded: True, version: <oracle.pgx.common.VersionInfo at 0x7f7cfb5ee200 jclass=oracle/pgx/common/VersionInfo jself=<LocalRef obj=0x3692a48 at 0x7f7d04084570>>)
>>> graph = session.create_graph_builder().add_edge(1, 2).add_edge(2, 3).build("my_graph")
>>> analyst.pagerank(graph)
VertexProperty(name: pagerank, type: double, graph: my_graph)
>>> rs = session.query_pgql("select id(x), x.pagerank from match (x) on my_graph")
>>> rs.print()
+-----------------------------+
| id(x) | pagerank            |
+-----------------------------+
| 1     | 0.05000000000000001 |
| 2     | 0.09250000000000003 |
| 3     | 0.12862500000000002 |
+-----------------------------+

ノート:

使用可能なPython APIの完全なセットを表示するには、Pypgx APIを参照してください。
1.12.2.2 モジュール・モード

このセクションでは、PythonクライアントをPythonアプリケーションでモジュールとして使用する方法について説明します。

埋込みサーバー

次の例に示すように、Pythonクライアントをモジュールとして使用できます。

ノート:

このモードでは、PythonクライアントとGraph Server RPMパッケージを同じマシンにインストールする必要があります。
import os
os.environ["PGX_CLASSPATH"] = "/opt/oracle/graph/lib/*"
 
import pypgx
 
session = pypgx.get_session()
graph = session.create_graph_builder().add_edge(1, 2).add_edge(2, 3).build("my_graph")
analyst = session.create_analyst()
analyst.pagerank(graph)
rs = session.query_pgql("select id(x), x.pagerank from match (x) on my_graph")
rs.print()

実行するには、前述のプログラムをprogram.pyという名前のファイルに保存し、次のコマンドを実行します。

python3 program.py

次の出力が表示されます。

+-----------------------------+
| id(x) | pagerank            |
+-----------------------------+
| 1     | 0.05000000000000001 |
| 2     | 0.09250000000000003 |
| 3     | 0.12862500000000002 |
+-----------------------------+

ノート:

使用可能なPython APIの完全なセットを表示するには、Pypgx APIを参照してください。

リモート・サーバー

このモードで必要なのは、インストールするPythonクライアントのみです。Pythonプログラムでは、次の例に示すように、セッションを作成する前にリモート・サーバーで認証する必要があります。

ノート:

base_url、usernameおよびpasswordを環境の詳細と一致する値に置き換えます。
import json
import os
import platform
import sys
from urllib.request import Request, urlopen
from urllib.error import HTTPError
import pypgx as pgx
 
 
base_url = "https://localhost:7007"
username = "scott"
password = "tiger"
 
 
def generateToken():
    body = json.dumps({ 'username': username, 'password': password }).encode('utf8')
    headers = { 'content-type': 'application/json' }
    request = Request(base_url + '/auth/token', data=body, headers=headers)
    try:
        response = urlopen(request).read().decode('utf-8')
        return json.loads(response).get('access_token')
    except HTTPError as err:
        if err.code == 400:
            print('Authentication failed no username/password given')
        elif err.code == 401:
            print('Authentication failed invalid username/password')
        else:
            print("Server returned HTTP response code: {} for URL: {}".format(err.code, err.url))
        os._exit(1)
 
session = pgx.get_session(base_url=base_url, token=generateToken())
print(session)

実行するには、前述のプログラムをprogram.pyという名前のファイルに保存し、次のコマンドを実行します。

python3 program.py

ログインに成功すると、PGXセッションが作成されたことを示す次のメッセージが表示されます。

PgxSession(id: 0bdd4828-c3cc-4cef-92c8-0fcd105416f0, name: python_pgx_client)

ノート:

使用可能なPython APIの完全なセットを表示するには、Pypgx APIを参照してください。

1.12.3 Pythonクライアントのトラブルシューティング

このセクションは、Pythonクライアントのインストールまたは使用に関する問題のトラブルシューティングに役立ちます。

Pythonクライアント・バージョンの確認

Pythonクライアント・インストールは、Python 3.5以降のバージョンを指すpython3に依存します。適切なバージョンのPythonクライアントを使用していることを確認するには、次のコマンドを実行します。
$> python3 --version
Python 3.6.1

インストール後にモジュールが見つかりません

場合によっては、Pythonクライアント・インストールが必要な依存関係のインストールに失敗し、シェルの実行時に次のエラー・メッセージが表示されることがあります。

ImportError: No module named 'jnius_config'

これを修正するには、これらのステップに従って、必要な依存関係を手動でインストールします:

  1. Oracle Graph Clientのインストール・ディレクトリに移動します。
  2. 次のコマンドを同じ順序で実行します。
    python3 -m pip install python/Cython-0.29.17.zip
    python3 -m pip install python/six-1.14.0.zip
    python3 -m pip install python/pyjnius-1.3.0.zip

1.12.4 Pythonクライアントのアンインストール

このセクションでは、Pythonクライアントをアンインストールする方法について説明します。

Pythonクライアントをアンインストールするには、次のコマンドを実行します。

pip3 uninstall pypgx