首页 > 解决方案 > 导出 Gremlin 数据库

问题描述

我想知道是否有任何方法可以导出 Gremlin 数据库及其所有顶点/边缘。最好输出是 Gremlin 遍历列表,如果需要,可以完全(甚至部分)再次导入。

这是作为工具存在还是存在于 TinkerPop 控制台客户端中?

因为我使用的是 CosmosDB,所以我一直在尝试 Azure 的数据迁移工具,它对我不起作用。使用 graphson() 也对我不起作用,但我可能以错误的方式使用它。

gremlin> graph.io(graphson()).writeGraph("/tmp/output.json");
No such property: graph for class: groovysh_evaluate

标签: azuregremlin

解决方案


我不知道有什么工具可以做到这一点:

最好输出是 Gremlin 遍历列表,如果需要,可以完全(甚至部分)再次导入。

我知道的所有导出工具都会导出为一些外部格式文本或二进制格式。您必须自己创建这样的功能,方法是编写一些 Gremlin,以允许您在客户端生成遍历String的方式返回数据。Bytecode我认为您可以将其导出为边缘列表:

gremlin> g.V().has('person','name','marko').
......1>   outE().
......2>   project('edgeLabel','weight','inV','outV').
......3>     by(label).
......4>     by('weight').
......5>     by(inV().valueMap(true)).
......6>     by(outV().valueMap(true))
==>[edgeLabel:created,weight:0.4,inV:[id:3,label:software,name:[lop],lang:[java]],outV:[id:1,label:person,name:[marko],age:[29]]]
==>[edgeLabel:knows,weight:0.5,inV:[id:2,label:person,name:[vadas],age:[27]],outV:[id:1,label:person,name:[marko],age:[29]]]
==>[edgeLabel:knows,weight:1.0,inV:[id:4,label:person,name:[josh],age:[32]],outV:[id:1,label:person,name:[marko],age:[29]]]

或星图样式:

gremlin> g.V().has('person','name','marko').
......1>   project('v','edges').
......2>     by(valueMap(true)).
......3>     by(bothE().
......4>        project('e','inV','outV').
......5>          by(valueMap(true)).
......6>          by(valueMap(true)).
......7>          by(valueMap(true)))
==>[v:[id:1,label:person,name:[marko],age:[29]],edges:[e:[id:9,label:created,weight:0.4],inV:[id:9,label:created,weight:0.4],outV:[id:9,label:created,weight:0.4]]]

上述查询仅提供基本结构。您可以提出更好的形式、更有效的表示等,但所提供的数据提供了在客户端构建遍历所需的所有数据。


推荐阅读