18.8 UPDATE問合せを実行するためのJava API
UPDATE
問合せは、INSERT
、UPDATE
およびDELETE
操作を使用して既存のグラフを変更します。
INSERT
を使用するとグラフに新しい頂点およびエッジを挿入でき、UPDATE
を使用するとプロパティを新しい値に設定して既存の頂点およびエッジを更新でき、DELETE
を使用するとグラフから頂点およびエッジを削除できます。
- PGQLによるグラフの更新可能性
Oracle RDBMSまたはCSVファイルからPGXにロードされたグラフ・データは、PGQLを介してすぐに更新することはできません。 - グラフ・サーバー(PGX)のグラフに対するUPDATE問合せの実行
グラフに対してUPDATE
問合せを実行するには、PgxGraph.executePgql(String query)
メソッドを使用します。 - PGXセッションに対するUPDATE問合せの実行
PgxSession
に対してUPDATE
問合せを実行することもできます。 - グラフの基礎となるスキーマの変更
INSERT
操作では、既知のラベルとプロパティを持つ頂点とエッジのみを挿入できます。同様に、UPDATE
操作では、既知のプロパティの値のみを設定できます。したがって、新しいデータは常にグラフの既存のスキーマに準拠する必要があります。
親トピック: グラフ・サーバー(PGX)に対するPGQL問合せの実行
18.8.1 PGQLによるグラフの更新可能性
Oracle RDBMSまたはCSVファイルからPGXにロードされたグラフ・データは、PGQLを介してすぐに更新することはできません。
最初に、PgxGraph.clone()
メソッドを使用してデータのコピーを作成する必要があります。結果のグラフは完全に更新可能です。
次のケースについて検討します。
// load a graph from the RDBMS or from CSV
PgxGraph g1 = session.readGraphByName("<graph>",GraphSource.PG_PGQL);
// create an updatable copy of the graph
PgxGraph g2 = g1.clone("new_graph_name");
// insert an additional vertex into the graph
g2.executePgql("INSERT VERTEX v " +
" LABELS ( Person ) " +
" PROPERTIES ( v.firstName = 'Camille', " +
" v.lastName = ' Mullins')");
さらに、前述の例の最後の2つのステップを組み合せて単一のステップにするPgxGraph.cloneAndExecutePgql(String query, String graphName)
メソッドもあります。
// create an updatable copy of the graph while inserting a new vertex
PgxGraph g2_copy = g1.cloneAndExecutePgql(
"INSERT VERTEX v " +
" LABELS ( Person ) " +
" PROPERTIES ( v.firstName = 'Camille', " +
" v.lastName = ' Mullins') "
, "new_graph_name");
PgxGraph.clone()
を介して作成されるグラフは、セッションに対してローカルであることに注意してください。ただし、PgxGraph.publish(..)
メソッドを介して他のセッションと共有することはできますが、PGQLを使用して更新することはできなくなりました。セッションローカル・グラフのみが更新可能ですが、永続グラフは更新できません。
親トピック: UPDATE問合せを実行するためのJava API
18.8.2 グラフ・サーバー(PGX)のグラフに対するUPDATE問合せの実行
グラフに対してUPDATE
問合せを実行するには、PgxGraph.executePgql(String query)
メソッドを使用します。
次に、INSERT
問合せの例を示します。
g.executePgql("INSERT VERTEX v " +
" LABELS ( Person ) " +
" PROPERTIES ( v.firstName = 'Camille', " +
" v.lastName = ' Mullins' ) ");
INSERT
のINTO
句は省略できることに注意してください。INTO
句を使用する場合、INTO
句のグラフ名は、問合せが実行されるPGXグラフ(PgxGraph.getName()
)の名前に対応している必要があります。
次に、UPDATE
問合せの例を示します。
// set the date of birth of Camille to 2014-11-15
g.executePgql("UPDATE v SET ( v.dob = DATE '2014-11-14' ) " +
"FROM MATCH (v:Person) " +
"WHERE v.firstName = 'Camille' AND v.lastName = ' Mullins' ");
次に、DELETE
問合せの例を示します。
// delete Camille from the graph
g.executePgql("DELETE v " +
"FROM MATCH (v:Person) " +
"WHERE v.firstName = 'Camille' AND v.lastName = 'Mullins' ");
親トピック: UPDATE問合せを実行するためのJava API
18.8.3 PGXセッションに対するUPDATE問合せの実行
PgxSession
に対してUPDATE
問合せを実行することもできます。
PgxSession
に対してUPDATE
問合せを実行します。//Loads the graph into the graph server (PGX)
PgxGraph g1 = session.readGraphByName("BANK_GRAPH_VIEW",GraphSource.PG_PGQL);
//Clones the graph
PgxGraph g2 = g1.clone("BANK_GRAPH_NEW");
//Get the graph
session.getGraph("BANK_GRAPH_NEW");
//Insert vertices and an edge connecting the vertices into the graph
session.executePgql(
"INSERT INTO BANK_GRAPH_NEW "+
" VERTEX v1 LABELS (Accounts) PROPERTIES (v1.id=1001, v1.name='New account-1') "+
", VERTEX v2 LABELS (Accounts) PROPERTIES (v2.id=1002, v2.name='New account-2') "+
", EDGE e1 BETWEEN v1 AND v2 LABELS (Transfers) PROPERTIES (e1.amount=3000) "
);
//Query the graph to verify the newly added edge
session.executePgql(
"SELECT e.amount FROM MATCH (v1:Accounts) -[e:Transfers]-> (v2:Accounts) "+
"ON BANK_GRAPH_NEW "+
"WHERE v1.id=1001 AND v2.id=1002"
);
親トピック: UPDATE問合せを実行するためのJava API
18.8.4 グラフの基礎となるスキーマの変更
INSERT
操作では、既知のラベルとプロパティを持つ頂点とエッジのみを挿入できます。同様に、UPDATE
操作では、既知のプロパティの値のみを設定できます。したがって、新しいデータは常にグラフの既存のスキーマに準拠する必要があります。
ただし、グラフのスキーマを更新するためのPGX APIはいくつか存在します。新しいラベルを追加するためのAPIは存在しませんが、PgxGraph.createVertexProperty(PropertyType type, String name)
およびPgxGraph.createEdgeProperty(PropertyType type, String name)
メソッドを介して新しいプロパティを追加できます。新しいプロパティは、ラベルに関係なく、グラフ内の各頂点/エッジにアタッチされます。最初はプロパティにデフォルト値が割り当てられますが、その後UPDATE
文を介して値を更新できます。
次のケースについて検討します。
// load a graph from the RDBMS or from CSV
PgxGraph g = session.readGraphByName("<graph>",GraphSource.PG_PGQL);
// add a new property to the graph
g.createVertexProperty(PropertyType.LOCAL_DATE, "dob");
// set the date of birth of Camille to 2014-11-15
g.executePgql("UPDATE v SET ( v.dob = DATE '2014-11-14' ) " +
"FROM MATCH (v:Person) " +
"WHERE v.firstName = 'Camille' AND v.lastName = ' Mullins' ");
親トピック: UPDATE問合せを実行するためのJava API