CSV で Vector プロパティをロードする
環境
Oracle Graph Server Shell 20.1.0 PGX server version: 19.4.0 type: SM PGX server API version: 3.6.0 PGQL version: 1.2
前提
- Pgx Server で
allow_local_filesystem
が true になっており、かつdatasource_dir_whitelist
に/opt/oracle/oradata
ディレクトリが指定されている
$ cat /etc/oracle/graph/pgx.conf { "allow_local_filesystem": true, "datasource_dir_whitelist": ["/opt/oracle/oradata"], ... }
- Pgx Server が稼働するサーバの
/opt/oracle/oradata
に/opt/oracle/oradata/sample.vertices.csv
と/opt/oracle/oradata/sample.edges.csv
が格納されている。
/opt/oracle/oradata/vector_props.vertices.csv
1,1;2;3,0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99,0.0;0.01;0.02;0.03;0.04;0.05;0.06;0.07;0.08;0.09;0.1;0.11;0.12;0.13;0.14;0.15;0.16;0.17;0.18;0.19;0.2;0.21;0.22;0.23;0.24;0.25;0.26;0.27;0.28;0.29;0.3;0.31;0.32;0.33;0.34;0.35;0.36;0.37;0.38;0.39;0.4;0.41;0.42;0.43;0.44;0.45;0.46;0.47;0.48;0.49;0.5;0.51;0.52;0.53;0.54;0.55;0.56;0.57;0.58;0.59;0.6;0.61;0.62;0.63;0.64;0.65;0.66;0.67;0.68;0.69;0.7;0.71;0.72;0.73;0.74;0.75;0.76;0.77;0.78;0.79;0.8;0.81;0.82;0.83;0.84;0.85;0.86;0.87;0.88;0.89;0.9;0.91;0.92;0.93;0.94;0.95;0.96;0.97;0.98;0.99,"hoge0;hoge1;hoge2;hoge3;hoge4;hoge5;hoge6;hoge7;hoge8;hoge9;hoge10;hoge11;hoge12;hoge13;hoge14;hoge15;hoge16;hoge17;hoge18;hoge19;hoge20;hoge21;hoge22;hoge23;hoge24;hoge25;hoge26;hoge27;hoge28;hoge29;hoge30;hoge31;hoge32;hoge33;hoge34;hoge35;hoge36;hoge37;hoge38;hoge39;hoge40;hoge41;hoge42;hoge43;hoge44;hoge45;hoge46;hoge47;hoge48;hoge49;hoge50;hoge51;hoge52;hoge53;hoge54;hoge55;hoge56;hoge57;hoge58;hoge59;hoge60;hoge61;hoge62;hoge63;hoge64;hoge65;hoge66;hoge67;hoge68;hoge69;hoge70;hoge71;hoge72;hoge73;hoge74;hoge75;hoge76;hoge77;hoge78;hoge79;hoge80;hoge81;hoge82;hoge83;hoge84;hoge85;hoge86;hoge87;hoge88;hoge89;hoge90;hoge91;hoge92;hoge93;hoge94;hoge95;hoge96;hoge97;hoge98;hoge99"
/opt/oracle/oradata/vector_props.edges.csv
1,2,1;2;3
CSV ファイルをロードする
var gcb = GraphConfigBuilder.forFileFormat(Format.CSV). addVertexUri("/opt/oracle/oradata/vector_props.vertices.csv"). addEdgeUri("/opt/oracle/oradata/vector_props.edges.csv") // Vector タイプの PropertyType. 第三引数で次元を指定 gcb.addVertexVectorProperty("vp_vector_int", PropertyType.INTEGER, 3) gcb.addVertexVectorProperty("vp_vector_long", PropertyType.LONG, 100) gcb.addVertexVectorProperty("vp_vector_double", PropertyType.DOUBLE, 100) gcb.addVertexVectorProperty("vp_vector_string", PropertyType.STRING, 100) gcb.addEdgeVectorProperty("ep_vector_int", PropertyType.INTEGER, 3) var g = session.readGraphWithProperties(gcb.build()) // Vector 型のプロパティの値の取り出し方 var vec_v_int_prop = g.getVertex(1).getProperty("vp_vector_int") // => vec_v_int_prop ==> PgxVect[type=integer,dimension=3] var vec_v_int = (oracle.pgx.common.util.vector.Vect<Integer>) (vec_v_int_prop) /* * | Warning: * | unchecked cast * | required: oracle.pgx.common.util.vector.Vect<java.lang.Integer> * | found: java.lang.Object * | var vec_v_int = (oracle.pgx.common.util.vector.Vect<Integer>) (vec_v_int_prop); * | ^--------------^ * vec_v_int ==> PgxVect[type=integer,dimension=3] */ vec_v_int.toArray() // $231 ==> Integer[3] { 1, 2, 3 } // String 型の vector は java.lang.NullPointerException が発生する g.getVertex(1).getProperty("vp_vector_string") /* * Exception java.util.concurrent.ExecutionException: java.lang.NullPointerException *| at CompletableFuture.reportGet (CompletableFuture.java:395) *| at CompletableFuture.get (CompletableFuture.java:1999) *| at PgxFuture.get (PgxFuture.java:99) *| at PgxEntity.getProperty (PgxEntity.java:280) *| at (#284:1) *| Caused by: java.lang.NullPointerException *| at PgxEntity.lambda$getPropertyAsync$1 (PgxEntity.java:191) *| at CompletableFuture$UniCompose.tryFire (CompletableFuture.java:1072) *| at CompletableFuture.postComplete (CompletableFuture.java:506) *| at CompletableFuture.complete (CompletableFuture.java:2073) *| at PgxFuture.completeWithResultOrException (PgxFuture.java:55) *| at CompletableFuture.uniWhenComplete (CompletableFuture.java:859) *| at CompletableFuture$UniWhenComplete.tryFire (CompletableFuture.java:837) *| at CompletableFuture.postComplete (CompletableFuture.java:506) *| at CompletableFuture.complete (CompletableFuture.java:2073) *| at PgxRemoteFuture.executeRequest (PgxRemoteFuture.java:107) *| at PgxRemoteFuture.lambda$fetchRemoteResultAsync$3 (PgxRemoteFuture.java:218) *| at ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128) *| at ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628) *| at Thread.run (Thread.java:834) */
Graph Config Json からロードする方法
{ "format": "csv", "edge_props": [{ "type": "integer", "name": "ep_vector_int", "dimension": 3 }], "error_handling": {}, "vertex_id_type": "integer", "vertex_uris": ["/opt/oracle/oradata/vector_props.vertices.csv"], "attributes": {}, "edge_uris": ["/opt/oracle/oradata/vector_props.edges.csv"], "loading": {}, "vertex_props": [{ "type": "integer", "name": "vp_vector_int", "dimension": 3 }, { "type": "long", "name": "vp_vector_long", "dimension": 100 }, { "type": "double", "name": "vp_vector_double", "dimension": 100 }] }
- PGX Client を起動して、Graph をロードする
// Graph Config Json ファイルは PGX Client 側に配置されているものを読みにいく var g = session.readGraphWithProperties("/tmp/vector_props_csv.json")