Autonomous Database Graphクライアントを使用したGraph Studio機能へのアクセス
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のインストール」を参照してください。
AdbGraphClient
APIを使用してGraph Studioへの接続を確立し、割り当てられたメモリーを使用して環境を起動し、「PGQLプロパティ・グラフ」をメモリーにロードし、PGQL問合せを実行し、グラフに対してアルゴリズムを実行する方法を示しています。
ノート:
AdbGraphClient
APIの詳細は、Javadocおよび「Python APIリファレンス」を参照してください。
- 対話型グラフ・シェルCLIを起動し、次のいずれかのメソッドを使用して、
AdbGraphClient
を使用してAutonomous Databaseインスタンスに接続します:テナンシ詳細を使用したAdbGraphClient
の構成cd /opt/oracle/graph ./bin/opg4j --no_connect For an introduction type: /help intro Oracle Graph Server Shell 24.4.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 24.4.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)
JDBC接続を使用したAdbGraphClient
の構成JDBC接続を使用してAutonomous Databaseインスタンスに接続するように
AdbGraphClient
を構成することもできます(次のコードを参照)。 Autonomous Databaseに接続するためのJDBC URLの取得方法については、「Oracle Autonomous Databaseサーバーレスの使用」の「JDBC Thin Driverと接続」を参照してください。ただし、Autonomous Databaseインスタンスの
v$pdbs
ビューへのREAD
アクセス権があることを確認してください。 デフォルトでは、ADMINユーザーはv$pdbs
ビューへのREAD
アクセス権を持ちます。 他のすべてのユーザー(管理者以外のユーザー)の場合、READ
アクセス権はADMIN (GRANT SELECT ON v$pdbs TO <user>
)によって付与できます。import oracle.pg.rdbms.* opg4j> var conn = DriverManager.getConnection(<jdbcUrl>, <username>, <password>) opg4j> var config = AdbGraphClientConfiguration.fromConnection(conn, <password>) opg4j> var client = new AdbGraphClient(config)
import oracle.pg.rdbms.*; AdbGraphClientConfiguration config = AdbGraphClientConfiguration.fromCredentials(<jdbcUrl>, <username>, <password>); AdbGraphClient client = new AdbGraphClient(config);
>>> from opg4py.adb import AdbClient >>> client = AdbClient.from_connection(<jdbcUrl>, <username>, <password>)
- 次のコードに示すように、目的のメモリーを使用して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
- 次のように、インスタンスおよびセッション・オブジェクトを作成します:
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")
- PGQLプロパティ・グラフをAutonomous Databaseインスタンスからメモリーにロードします。
opg4j> var graph = session.readGraphByName("BANK_GRAPH", GraphSource.PG_PGQL) graph ==> PgxGraph[name=BANK_GRAPH,N=1000,E=5001,created=1647800790654]
PgxGraph graph = session.readGraphByName("BANK_GRAPH", GraphSource.PG_PGQL);
>>> graph = session.read_graph_by_name("BANK_GRAPH", "pg_pgql")
- アナリストを作成し、次に示すように、グラフ上でPagerankアルゴリズムを実行します:
- グラフで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 | +------------------------------------------------------+
- オプションで、次のコードに示すように、データベースのグラフに対してPGQL問合せを直接実行できます。データベースへのJDBC接続を確立するには、ウォレットをダウンロードして安全なロケーションに保存する必要があります。 JDBC URL接続文字列を決定する方法については、「Walletを使用した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 | +-------------------------------+
- 次に示すように、すべてのグラフ問合せを実行した後、セッションを閉じます: