请问nebula是否支持已有图空间向新图空间的批量合并创建节点和边?如何用nGQL更好的实现两个图空间的合并?类似于SQL中的JOIN

我的需求是这样的:将两个图空间A,B合并(即在图A的基础上加入B的节点和B的边),合并后生成第三个图空间C,这种有现成的nGQL支持批量增删吗,还是我必须单个边单个节点的执行nGQL?

据我所知,目前是不支持的。方便告知下你这个需求的具体业务场景么? cc @MuYi

您好,我们业务场景就是想实现知识融合,考虑将两个不同来源的知识图谱进行融合,目前如果没有很好的nGQL支持批量点边的融合的话,我们考虑:

首先用CREATE SPACE AS 来克隆A图 A’,查询并加入图B的所有Tag和EdgeType类型。此后,查询B中的全部节点的信息, 一一把这些节点INSERT到A’中,最后查询所有的B中所有的边,将其一一创建到图A’中.

您看这样是否有优化的空间呢,因为考虑到节点和边会很多,不能批量加入点和边的话,一条一条的加入点边的方案,合并效果可能会比较慢?

注意,这个语句只是克隆 schema 是不会拷贝数据的(也就是说你原图 A 的数据得重新导入到 A’)。

用数据导入工具 nebula-imoprter 之类的可以直接批量导入数据啊。

:thinking: 不过你这个方案有个问题就是,A 和 B 如果都有相同过的点 v1,也都有相同的 tag1,但是 A 和 B 的中的 tag1 的属性值不一样的话,合并的时候是以最后插入的数据为准的。

好的谢谢您的提醒!感谢!

请问如果用nebula-importer的话,可以在原图已经存在的基础上批量导入吗?因为是要合并两个图空间的缘故,在合并的时候感觉必然会涉及在 图空间已经存在点和边的情况下,再次进行新的导入。

此外我还在调研spark-connector,能否实现上述需求,请问您怎么看呢?

批量导入的话,就是覆盖写。:thinking: 比如 数据 A 你之前已经在图空间了,数据 B 要导入,但是当中有部分是 A 的子集的话,再导入会直接覆盖之前的数据的。

请问关于覆盖,您是指仅覆盖二者重合部分,还是数据A全部被B覆盖?

schema 重叠的部分,如果数据不同的话,会最后写入的覆盖原先的。

目前能想到的一个优化点是,更新的时候可以用批量更新。性能会好一些。

您好,请问您您说的批量更新,具体是指什么方法呢,有什么相关资料我可以参考下吗?我似乎不太了解这块,谢谢您

:face_holding_back_tears: 估计就是批量的用 importer 或者是其他的数据导入工具导入。cc @MuYi 我理解的对么

emmm可是似乎没有企业版的话,不好从图空间里export出来然后import把,您看我理解的对吗? :pleading_face:

嗯,你了解是对的,如果你有别的数据源的话另算。

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。