機械翻訳について

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のインストール」を参照してください。

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

ノート:

AdbGraphClient APIの詳細は、Javadocおよび「Python APIリファレンス」を参照してください。
  1. 対話型グラフ・シェル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>)
  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. 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")
  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接続文字列を決定する方法については、「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         |
    +-------------------------------+
    
  8. 次に示すように、すべてのグラフ問合せを実行した後、セッションを閉じます:
    opg4j> session.close()
    opg4j> session.close();
    >>> session.close()