3.4 プロパティ・グラフ・ビューのメタデータの取得

PGQL問合せで組込みPROPERTY_GRAPH_METADATAグラフを使用して、データベースに作成されたプロパティ・グラフ・ビューのメタデータを取得できます。

PROPERTY_GRAPH_METADATAグラフ構造(プロパティを含む)を次に示します。

図3-4 PROPERTY_GRAPH_METADATAグラフ設計

図3-4の説明が続きます
「図3-4 PROPERTY_GRAPH_METADATAグラフ設計」の説明

前述のメタデータ・グラフの設計を次に記述します。

PROPERTY_GRAPH -[:HAS_VERTEX_TABLE]-> VERTEX_TABLE
               -[:HAS_EDGE_TABLE]-> EDGE_TABLE
 
VERTEX_TABLE -[:HAS_KEY_COLUMN]-> KEY_COLUMN
             -[:HAS_LABEL]-> LABEL
 
EDGE_TABLE -[:HAS_KEY_COLUMN]-> KEY_COLUMN
           -[:HAS_LABEL]-> LABEL
           -[:HAS_SOURCE_TABLE]-> VERTEX_TABLE
           -[:HAS_DESTINATION_TABLE]-> VERTEX_TABLE
 
LABEL -[:HAS_PROPERTY]-> PROPERTY

PGQL問合せでPROPERTY_GRAPH_METADATAを使用するときは、次の点に注意してください。

  • PGQL問合せで初めてアクセスしようとすると、PROPERTY_GRAPH_METADATAが自動的に作成され、更新されます。
  • Java APIを使用してPGQL問合せを実行する場合は、JDBC接続で自動コミットを無効(conn.setAutoCommit(false))にする必要があります。これにより、必ずPROPERTY_GRAPH_METADATAグラフが自動的に作成されます。

次の例に、PGQL問合せでPROPERTY_GRAPH_METADATAを使用して必要なメタデータを取得する方法を示します。

次のように、アクセス権があるグラフのリストを取得できます。

opg4j> String pgql =
...> "SELECT g.graph_name "
...> +"FROM MATCH (g:property_graph) ON property_graph_metadata "
...> +"ORDER BY g.graph_name"
pgql ==> "SELECT g.graph_name FROM MATCH (g:property_graph) ON property_graph_metadata ORDER BY g.graph_name"
opg4j> pgqlStmt.executeQuery(pgql).print()
String pgql = "SELECT g.graph_name "+
"FROM MATCH (g:property_graph) ON property_graph_metadata "+
"ORDER BY g.graph_name";
PgqlResultSet rs = pgqlStmt.executeQuery(pgql);
rs.print();
>>> pgql = '''
... SELECT g.graph_name
... FROM MATCH (g:property_graph) ON property_graph_metadata
... ORDER BY g.graph_name
... '''
>>> pgql_statement.execute_query(pgql).print()

実行すると、前述の問合せによって次の結果が生成されます。

+------------------------+
| GRAPH_NAME             |
+------------------------+
| BANK_GRAPH_VIEW        |
| FINANCIAL_TRANSACTIONS |
| FRIENDS                |
+------------------------+

次のように、グラフの頂点プロパティを取得できます。

opg4j> String pgql =
...> "SELECT p.property_name "
...> +"FROM MATCH(g:property_graph)-[:has_vertex_table]->(v)-[:has_label]->(l:label)-[:has_property]->(p:property) "
...> +"ON property_graph_metadata "
...> +"WHERE g.graph_name = 'FRIENDS' "
pgql ==> "SELECT p.property_name FROM MATCH(g:property_graph)-[:has_vertex_table]->(v)-[:has_label]->(l:label)-[:has_property]->(p:property) ON property_graph_metadata WHERE g.graph_name = 'FRIENDS' "
opg4j> pgqlStmt.executeQuery(pgql).print()
String pgql = "SELECT p.property_name "+
"FROM MATCH(g:property_graph)-[:has_vertex_table]->(v)-[:has_label]->(l:label)-[:has_property]->(p:property) "+
"ON property_graph_metadata "+
"WHERE g.graph_name = 'FRIENDS' ";
PgqlResultSet rs = pgqlStmt.executeQuery(pgql);
rs.print();
>>> pgql = '''
... SELECT p.property_name
... FROM MATCH(g:property_graph)-[:has_vertex_table]->(v)-[:has_label]->(l:label)-[:has_property]->(p:property)
... ON property_graph_metadata
... WHERE g.graph_name = 'FRIENDS'
... '''
>>> pgql_statement.execute_query(pgql).print()

実行すると、前述の問合せによって次の結果が生成されます。

+---------------+
| PROPERTY_NAME |
+---------------+
| BIRTHDATE     |
| HEIGHT        |
| NAME          |
+---------------+