16.4 PGQLプロパティ・グラフ用のJupyter Notebookインタフェースの使用

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

また、Jupyter NotebookとJupyterLabの両方で、グラフ・ビジュアライゼーション拡張機能を使用してPGQLプロパティ・グラフをビジュアル化できます。詳細は、Jupyter環境のグラフ・ビジュアライゼーション拡張機能のスタート・ガイドを参照してください。

次のステップは、Jupyter環境(Jupyter NotebookまたはJupyterLab)でPGQLプロパティ・グラフを作成およびビジュアル化する方法を示しています。

  1. 必要なJupyter Notebookインタフェース(Jupyter NotebookまたはJupyterLab)をインストールします。
  2. JupyterインストールがPATH環境変数に追加されていることを確認します。
  3. Jupyter環境にグラフ・ビジュアライゼーション拡張機能をインストールします。詳細は、Jupyter用グラフ・ビジュアライゼーション拡張機能のインストールを参照してください。
  4. 次のコードを使用して、OPG4Py Python APIでノートブック・セルのPGQLプロパティ・グラフを作成および問い合せます。
    import opg4py;
    from pypgx import setloglevel
    from opg4py import graph_server
    setloglevel("ROOT", "WARN")
    
    pgql_conn = opg4py.pgql.get_connection("<username>","<password_for_user>","jdbc:oracle:thin:@<host_name>/<service>")
    pgql_statement = pgql_conn.create_statement()
    pgql = '''
        CREATE PROPERTY GRAPH bank_graph_pgql
          VERTEX TABLES (
            BANK_ACCOUNTS
              KEY ( ID )
              LABEL accounts PROPERTIES ( ID, name )
          )
          EDGE TABLES (
            BANK_TRANSFERS
              SOURCE KEY ( src_acct_id ) REFERENCES BANK_ACCOUNTS(ID)
              DESTINATION KEY ( dst_acct_id ) REFERENCES BANK_ACCOUNTS(ID)
              LABEL transfers PROPERTIES ( amount, description, src_acct_id, dst_acct_id, txn_id )
          ) OPTIONS(PG_VIEW)
    '''
    pgql_statement.execute(pgql

    図16-1 Jupyter NotebookでのPGQLプロパティ・グラフの作成および問合せ

    図16-1の説明が続きます
    「図16-1 Jupyter NotebookでのPGQLプロパティ・グラフの作成および問合せ」の説明
  5. oraclegraph Jupyter拡張機能のPgqlGraphVisualizationを使用して問合せ結果をビジュアル化します。
    1. Python oracledbドライバを使用して、データベースへの接続を確立します。
      import oracledb
      connection = connection=oracledb.connect(
      user=graphuser,
      password="<password_for_graph_user>",
      dsn="<hostname:port/dbservice>",
      print("Connection established successfully.")
    2. プロパティ・グラフに対してPGQL問合せを実行し、グラフ・ビジュアライゼーション拡張機能を使用して問合せ結果をビジュアル化します。
      たとえば次の例は、ステップ4でoraclegraph Jupyter拡張機能のPgqlGraphVisualizationを使用して作成した、プロパティ・グラフに対するPGQL問合せのグラフ・ビジュアライゼーションを示しています。
      from pypgx import setloglevel
      from oraclegraph import GraphVisualization, PgqlGraphVisualization
      
      setloglevel('ROOT', 'WARN')
      
      vq = PgqlGraphVisualization("graphuser", "<password_for_graphuser>", "<host_name:port>/<service>")
      
      query='''
      SELECT * FROM GRAPH_TABLE (bank_graph_pgql
        MATCH (a) -[e]-> (b)
        WHERE a.ID=816
      COLUMNS (a.ID AS src_ac, e.AMOUNT AS amount, b.ID AS dest_ac)
      )
      '''
      graph_query = vq.visualize_query(query)
      
      defaults_feature = {
        "interactionActive": True,
        "1stickyActive": True
      }
      
      base_styles = {
        "vertex": {
          "label": "${properties.ID}",
          "size": 20
        },
        "edge": {
          "label": "${properties.AMOUNT}"
        }
      }
      
      rule_based_styles = [{
          "stylingEnabled": True,
          "component": "vertex",
          "target": "vertex",
          "conditions": {
            "conditions": [{
              "property": "BALANCE",
              "operator": "<=",
              "value": 5000
            }],
          },
          "style": {
            "color": "green"
          },
          "legendTitle": "Balance Filter",
          "legendDisplayed": True
        }
      
      ]
      
      settings = {
        "numberOfHops": 2,
        "showLegend": True,
        "defaults": defaults_feature,
        "baseStyles": base_styles,
        "ruleBasedStyles": rule_based_styles
      }
      bank_graph = GraphVisualization(data = graph_query, settings = settings)
      bank_graph.height = 600
      display(bank_graph)

      前述のコードによるビジュアライゼーションの結果は次のようになります:

      図16-2 PGQlプロパティ・グラフのビジュアライゼーション



  6. グラフ・サーバー(PGX)のプロパティ・グラフをロードして分析します。
    次の例に、PGQLプロパティ・グラフをグラフ・サーバー(PGX)にロードし、分析用のグラフ・アルゴリズムを実行する方法を示します。
    base_url = "https://localhost:7007"
    username = "graphuser"
    password = "<password_for_graphuser>"
    
    instance = graph_server.get_instance(base_url, username, password)
    session = instance.create_session('jupyter')
    graph = session.read_graph_by_name('BANK_GRAPH_PGQL', 'pg_pgql')
    analyst = session.create_analyst()
    analyst.pagerank(graph)
    rs = graph.query_pgql("SELECT id(x), x.pagerank FROM MATCH (x) LIMIT 5")
    rs.print()

    図16-3 Jupyter Notebookでのグラフ・アルゴリズムの実行

    図16-3の説明が続きます
    「図16-3 Jupyter Notebookでのグラフ・アルゴリズムの実行」の説明