原文はこちら。
https://blogs.oracle.com/oraclespatial/entry/property_graph_query_language_pgql
Oracle Database 12c Release 2 (12.2.0.1)で、Oracle Spatial and Graphの既存のProperty Graph機能にProperty Graph Query Language (PGQL) のサポートを追加するパッチがリリースされました。ダウンロードにはMy Oracle Supportの契約が必要です。
このパッチを貴社のデータベースインスタンスに適用すると、以下のGroovy/Javaベースのクイックテストを実行して、動作方法を確認できます。
https://blogs.oracle.com/oraclespatial/entry/property_graph_query_language_pgql
Oracle Database 12c Release 2 (12.2.0.1)で、Oracle Spatial and Graphの既存のProperty Graph機能にProperty Graph Query Language (PGQL) のサポートを追加するパッチがリリースされました。ダウンロードにはMy Oracle Supportの契約が必要です。
Patch 25640325: MISSING PGQL FUNCTION IN ORACLE DATABASE RELEASE 12.2.0.1PGQLはSQLのような宣言型言語で、これを使って、頂点と辺、ならびに頂点と辺のプロパティへの制約から構成されるグラフクエリパターンを表現することができます。
https://support.oracle.com/rs?type=patch&id=25640325
このパッチを貴社のデータベースインスタンスに適用すると、以下のGroovy/Javaベースのクイックテストを実行して、動作方法を確認できます。
cd $ORACLE_HOME/md/property_graph/dal/groovy
sh ./gremlin-opg-rdbms.sh
--------------------------------
opg-oracledb> // It is very likely that you need to customize JdbcURL, Username, and Password in the following graph config setting.
opg-oracledb> //
opg-oracledb> cfg = GraphConfigBuilder.forPropertyGraphRdbms().setJdbcUrl("jdbc:oracle:thin:@127.0.0.1:1521:orcl")
.setUsername("scott").setPassword("tiger")
.setName("connections") .setMaxNumConnections(8)
.setLoadEdgeLabel(false) .addVertexProperty("name", PropertyType.STRING, "default_name")
.addEdgeProperty("cost", PropertyType.DOUBLE, "1000000")
.build();
opg-oracledb> opg = OraclePropertyGraph.getInstance(cfg);
opg-oracledb> opg.clearRepository(); // start from scratch
opg-oracledb> opgdl=OraclePropertyGraphDataLoader.getInstance();
opg-oracledb> vfile="../../data/connections.opv" // vertex flat file
==>../../data/connections.opv
opg-oracledb> efile="../../data/connections.ope" // edge flat file
==>../../data/connections.ope
opg-oracledb> opgdl.loadData(opg, vfile, efile, 2, 10000, true, null);
==>null
opg-oracledb> opg.countVertices()
==>78
opg-oracledb> opg.countEdges()
==>164
opg-oracledb> // Create an in memory analytics session and analyst
opg-oracledb> session=Pgx.createSession("session_ID_1");
opg-oracledb> analyst=session.createAnalyst();
opg-oracledb>
opg-oracledb> // Read graph data from database into memory
opg-oracledb> pgxGraph = session.readGraphWithProperties(opg.getConfig());
==>PgxGraph[name=connections,N=78,E=164,created=1488415009543]
opg-oracledb> pgxResultSet = pgxGraph.queryPgql("SELECT n,m WHERE (n) -> (m)")
==>PgqlResultSetImpl[graph=connections,numResults=164]
opg-oracledb> pgxResultSet.print(10);
+------------------------------------+
| n | m |
+------------------------------------+
| PgxVertex[ID=2] | PgxVertex[ID=1] |
| PgxVertex[ID=3] | PgxVertex[ID=1] |
| PgxVertex[ID=6] | PgxVertex[ID=1] |
| PgxVertex[ID=7] | PgxVertex[ID=1] |
| PgxVertex[ID=8] | PgxVertex[ID=1] |
| PgxVertex[ID=9] | PgxVertex[ID=1] |
| PgxVertex[ID=10] | PgxVertex[ID=1] |
| PgxVertex[ID=11] | PgxVertex[ID=1] |
| PgxVertex[ID=12] | PgxVertex[ID=1] |
| PgxVertex[ID=19] | PgxVertex[ID=1] |
+------------------------------------+