4.1 SQLプロパティ・グラフの操作のクイック・スタート
このチュートリアルは、SQLプロパティ・グラフでのグラフ・アルゴリズムの作成、問合せおよび実行を開始するのに役立ちます。
開始する前に、SQLプロパティ・グラフを作成および削除するために必要な権限があることを確認してください。詳細は、「SQLプロパティ・グラフに対するシステム権限およびオブジェクト権限の付与」を参照してください。
次のチュートリアルは、SQLclツールを使用しており、データベース表のグラフ・サーバー・インストールで提供されるサンプル銀行グラフ・データ(サンプル・グラフ・データの使用を参照)に基づいています。ただし、これらの例は任意のSQLベースのインタフェースを使用して実行できます。
CREATE PROPERTY GRAPHDDL文を使用してSQLプロパティ・グラフを作成します。SQL> CREATE PROPERTY GRAPH bank_sql_graph 2 VERTEX TABLES ( 3 BANK_ACCOUNTS 4 KEY ( id ) 5 LABEL accounts 6 PROPERTIES ( id, name ) 7 ) 8 EDGE TABLES ( 9 BANK_TRANSFERS 10 SOURCE KEY ( src_acct_id ) REFERENCES BANK_ACCOUNTS(id) 11 DESTINATION KEY ( dst_acct_id ) REFERENCES BANK_ACCOUNTS(id) 12 LABEL transfers 13 PROPERTIES ( amount, description, src_acct_id, dst_acct_id, txn_id ) 14* ); Property GRAPH created.実行時に、
bank_sql_graphグラフがデータベースに作成されます。グラフは、1つの頂点グラフ要素表(bank_accounts)と1つのエッジ・グラフ要素表(bank_transfers)で構成されます。グラフ要素表、キー、ラベルおよびプロパティの概念を学習するには、「SQLプロパティ・グラフの作成」を参照してください。
- 新しく作成したグラフでSQLグラフ問合せを実行して、
id値816を持つアカウントのすべてのトランザクションをリストします。SQL> SELECT * FROM GRAPH_TABLE (bank_sql_graph 2 MATCH 3 (a IS accounts WHERE a.id = 816) -[e IS transfers]-> (b IS accounts) 4 COLUMNS (a.id AS acc_a, e.amount AS amount, b.id AS acc_b) 5* ); ACC_A AMOUNT ACC_B ________ _________ ________ 816 8781 287 816 6381 590 816 9011 934 816 6890 289 816 4443 812詳細は、SQLグラフ問合せを参照してください。
- オプションで、グラフ・サーバー(PGX)をインストールした場合は、グラフ・ビジュアライゼーション・ツールを使用して前述のSQLグラフ問合せをビジュアル化することもできます。
唯一の違いは、SQLグラフ問合せの頂点とエッジをIDおよびすべてのラベルとプロパティとともにビジュアル化するために、頂点およびエッジIDを返す必要がある点です。次の例の
COLUMNS句では、VERTEX_IDおよびEDGE_ID関数が使用されています:VERTEX_IDおよびEDGE_ID関数についてさらに学習するには、「頂点およびエッジ識別子」を参照してください。- 詳細は、「SQLプロパティ・グラフに対するグラフ問合せのビジュアル化」を参照してください。
- グラフ・アルゴリズムを実行する場合は、グラフをグラフ・サーバー(PGX)にロードします。
opg4j> var graph = session.readGraphByName("BANK_SQL_GRAPH", GraphSource.PG_SQL) graph ==> PgxGraph[name=BANK_SQL_GRAPH,N=1000,E=5001,created=1752053171422]PgxGraph graph = session.readGraphByName("BANK_SQL_GRAPH", GraphSource.PG_SQL);>>> graph = session.read_graph_by_name("BANK_SQL_GRAPH", "pg_sql") >>> graph PgxGraph(name: BANK_SQL_GRAPH, v: 1000, e: 5001, directed: True, memory(Mb): 0)詳細は、グラフ・サーバー(PGX)へのSQLプロパティ・グラフのロードを参照してください。 - 次のように、PageRankアルゴリズムを実行します。
opg4j> var analyst = session.createAnalyst() analyst ==> NamedArgumentAnalyst[session=0fb6bea7-d467-458d-90c3-803d2932df12] opg4j> analyst.pagerank(graph) $3 ==> VertexProperty[name=pagerank,type=double,graph=bank_sql_graph]Analyst analyst = session.createAnalyst(); analyst.pagerank(graph);>>> analyst = session.create_analyst() >>> analyst.pagerank(graph) VertexProperty(name: pagerank, type: double, graph: bank_sql_graph) - グラフを問い合せて、ページ・ランク別に上位10件のアカウントをリストします。
opg4j> session.queryPgql("SELECT a.id, a.pagerank FROM MATCH (a) ON bank_sql_graph ORDER BY a.pagerank DESC LIMIT 5").print() +-----------------------------+ | id | pagerank | +-----------------------------+ | 387 | 0.007302836252205924 | | 406 | 0.006734430614559079 | | 135 | 0.006725965475577353 | | 934 | 0.006641340764834484 | | 397 | 0.0057016075312134595 | +-----------------------------+ $5 ==> PgqlResultSetImpl[graph=bank_sql_graph,numResults=5]session.queryPgql("SELECT a.id, a.pagerank FROM MATCH (a) ON bank_sql_graph ORDER BY a.pagerank DESC LIMIT 5").print();>>> session.query_pgql("SELECT a.id, a.pagerank FROM MATCH (a) ON bank_sql_graph ORDER BY a.pagerank DESC LIMIT 5").print() +-----------------------------+ | id | pagerank | +-----------------------------+ | 387 | 0.007302836252205924 | | 406 | 0.006734430614559079 | | 135 | 0.006725965475577353 | | 934 | 0.006641340764834484 | | 397 | 0.0057016075312134595 | +-----------------------------+ - グラフ問合せの実行後に、SQLプロパティ・グラフを削除します。
SQL> DROP PROPERTY GRAPH bank_sql_graph; Property dropped.
親トピック: SQLプロパティ・グラフの概要
