OrientDB GraphED - 在两个(选择的顶点RID)之间插入SQL边缘?或者在进行大规模导入时采用替代方法

3
例如,在OrientDB图形中有两个简单的顶点:
orientdb> CREATE DATABASE local:/databases/test admin admin local graph;       
Creating database [local:/databases/test] using the storage type [local]...
Database created successfully.
Current database is: local:/graph1/databases/test
orientdb> INSERT INTO V (label,in,out) VALUES ('vertexOne',[],[]);                                                                                                                 
Inserted record 'V#6:0{label:vertexOne,in:[0],out:[0]} v0' in 0.001000 sec(s).
orientdb> INSERT INTO V (label,in,out) VALUES ('vertexTwo',[],[]);
Inserted record 'V#6:1{label:vertexTwo,in:[0],out:[0]} v0' in 0.000000 sec(s).

是否有一种方法可以仅通过知道顶点的“标签”而不是其“RID”来创建这两个顶点之间的边缘?

例如(不起作用):

orientdb> INSERT INTO E (label, in, out) VALUES ('is_connected_to', (SELECT @rid FROM V WHERE label = 'vertexOne'), (SELECT @rid FROM V WHERE label = 'vertexTwo'));
Inserted record 'E#7:0{label:is_connected_to,in:null,out:null} v0' in 0.001000 sec(s).

我尝试使用“FLATTEN”作为潜在的解决方法。没有成功:

orientdb> INSERT INTO E (label, in, out) VALUES ('is_connected_to', (SELECT FLATTEN(@rid) FROM V WHERE label = 'vertexOne'), (SELECT FLATTEN(@rid) FROM V WHERE label = 'vertexTwo'));
Inserted record 'E#7:1{label:is_connected_to,in:null,out:null} v0' in 0.001000 sec(s).

创建的边缘是在nullnull之间。不行。
我希望使用OrientDB SQL来解决这个问题,因为我有一个非常大的连接导入,SQL方法似乎更快。
但是,如果这不可能,您有任何关于批量导入边缘(大约2M)的替代建议吗?
2个回答

2

SQLCreateEdge 是您可能想要执行的操作:

create edge from
(select from V where label = 'vertexOne')
to
(select from V where label = 'vertexTwo')
set label = 'is_connected_to'

然而,对于非常大的连接导入,我建议使用SQLCreateLink。这个宝石在这里被推荐。


0
可以使用 SQL 批量操作 进行批量边缘插入。
begin;
  CREATE EDGE E FROM #34:3349  TO #32:3349;
  CREATE EDGE E FROM #41:10971 TO #33:3348;
commit retry 100;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接