无法在 DSE 图中打印节点属性

Posted

技术标签:

【中文标题】无法在 DSE 图中打印节点属性【英文标题】:Unable to print node properties in DSE graph 【发布时间】:2017-09-03 04:12:57 【问题描述】:

抱歉,这可能是关于该主题的非常基本的问题,但我是 Gremlin/DSE Graph 的新手,我尝试了多种方法来提取我插入到我的图表中的数据,但不知何故我无法使其工作。

这是我所拥有的: 1. 将 allow_scans 设置为 true 的图表 2. 在所有顶点的 NodeID 上定义了 propertyKey 和顶点的模式和物化索引。

目前没有任何关系,只有顶点与数据点。

我编写了一个程序来将我的所有节点插入 DSE Graph,该程序运行成功,因为在程序创建每个顶点后我得到如下响应:

Result(u'id': u'out_vertex': u'community_id': 853347840, u'~label': u'vertex', u'member_id': 14, u'~type': u'Name', u'local_id': u'00000000-0000-8012-0000-000000000000', u'value': u'amount', u'label': u'Name')]

好的,现在节点已插入,我想提取它们并打印它们的名称: 所以我做到了:

g.V().hasLabel('FIELD').has('NodeID','2559b635f077e86c7370ab1c4c798a06').values('Name');

以上失败,结果为空白。我的意思是它以空输出成功运行,就像没有错误但没有输出一样。 (gremlin-console 中为空,DataStax Studio 中为“成功 - 无结果”)

然后我遇到了该图不知道“has”是否只会返回一个或多个节点的文档,因此我根据文档和教程使用 next 进行迭代:

g.V().hasLabel('FIELD').has('NodeID','2559b635f077e86c7370ab1c4c798a06').next().values('Name');

即使这失败了

org.apache.tinkerpop.gremlin.driver.exception.ResponseException

(Datastax 工作室没有显示更多信息) - 我该如何进一步调试?

我什至遇到了使用 map 的 lambda 方法:

g.V().hasLabel('FIELD').has('NodeID','2559b635f077e86c7370ab1c4c798a06').mapit.get().value('Name');

以未定义的“它”作为响应。

(我什至尝试过 valueMap - 不确定是否需要)

我在查找和打印节点的属性值时做错了什么?

任何可以帮助我提取名称和其他属性的说明或查询?甚至是多步查询?但是我认为这不应该那么复杂。

更新

根据答案,我得到以下回溯:

gremlin> :> g.V().hasLabel('FIELD').has('NodeID','2559b635f077e86c7370ab1c4c798a06').valueMap(true).next();
org.apache.tinkerpop.gremlin.groovy.plugin.RemoteException
Type ':help' or ':h' for help.
Display stack trace? [yN]y
org.apache.tinkerpop.gremlin.groovy.plugin.RemoteException
        at org.apache.tinkerpop.gremlin.console.groovy.plugin.DriverRemoteAcceptor.submit(DriverRemoteAcceptor.java:170)
        at org.apache.tinkerpop.gremlin.console.commands.SubmitCommand.execute(SubmitCommand.groovy:41)
        at org.codehaus.groovy.tools.shell.Shell.execute(Shell.groovy:104)
        at org.codehaus.groovy.tools.shell.Groovysh.super$2$execute(Groovysh.groovy)
        at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1215)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:132)
        at org.codehaus.groovy.tools.shell.Groovysh.executeCommand(Groovysh.groovy:259)
        at org.apache.tinkerpop.gremlin.console.GremlinGroovysh.execute(GremlinGroovysh.groovy:84)
        at org.codehaus.groovy.tools.shell.Shell.leftShift(Shell.groovy:122)
        at org.codehaus.groovy.tools.shell.ShellRunner.work(ShellRunner.groovy:95)
        at org.codehaus.groovy.tools.shell.InteractiveShellRunner.super$2$work(InteractiveShellRunner.groovy)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1215)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:132)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuper0(ScriptBytecodeAdapter.java:152)
        at org.codehaus.groovy.tools.shell.InteractiveShellRunner.work(InteractiveShellRunner.groovy:124)
        at org.codehaus.groovy.tools.shell.ShellRunner.run(ShellRunner.groovy:59)
        at org.codehaus.groovy.tools.shell.InteractiveShellRunner.super$2$run(InteractiveShellRunner.groovy)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1215)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:132)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuper0(ScriptBytecodeAdapter.java:152)
        at org.codehaus.groovy.tools.shell.InteractiveShellRunner.run(InteractiveShellRunner.groovy:83)
        at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:232)
        at org.apache.tinkerpop.gremlin.console.Console.<init>(Console.groovy:152)
        at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:232)
        at org.apache.tinkerpop.gremlin.console.Console.main(Console.groovy:401)

我可以在另一个图中做一些类似的操作。图表有问题吗?

更新 2

我的图表顶点定义错误。

深入了解此解决方案的关键在于结果中的~label。它指向vertex 而应该是Field

在定义数据插入团队时,他们不得不将标签放在引号中,而他们不得不在不带引号的情况下添加提及标签。因此我无法遍历节点。

【问题讨论】:

【参考方案1】:

您需要确保迭代遍历。最常见的情况是:

iterate() 得到零结果 next()得到一个结果 toList() 得到很多结果

我猜NodeID 是独一无二的,所以试试这样的:

g.V().hasLabel('FIELD').has('NodeID','2559b635f077e86c7370ab1c4c798a06').
values('Name').next();

如果您对该顶点的所有属性感兴趣,请尝试:

g.V().hasLabel('FIELD').has('NodeID','2559b635f077e86c7370ab1c4c798a06').
valueMap(true).next();

【讨论】:

感谢您的回答,我已经更新了我得到的跟踪。图表似乎有问题。请你能帮我找出这里可能是什么问题。 g.V().hasLabel('FIELD').has('NodeID','2559b635f077e86c7370ab1c4c798a06')。 values('Name') 在另一个具有相似节点的图中工作。不知道这个出了什么问题。 我的顶点定义错误。你的答案是正确的。谢谢

以上是关于无法在 DSE 图中打印节点属性的主要内容,如果未能解决你的问题,请参考以下文章

跟踪图中节点的级别并打印每个节点的级别

DataStax OpsCenter 未在 centos dse 集群上启动

无法在 DSE 中启用 Alwayson sql

DSE:激活 OLAP

DSE 无法运行程序 df - 打开的文件太多

DSE 图中是不是支持服务器端功能?