查询有关创建的节点数或添加的边数的统计信息
Query statistics on number of nodes created or edges added
OpenCypher 提供有关作为查询执行结果创建的节点数或更新的边数的统计信息:
queryResult.summary?.updateStatistics?.updates()?.nodesCreated
我正在尝试寻找 Gremlin 是否有类似的机制; explain/profile API return 谓词但不是 edges/nodes 受影响人数的信息。
如果有任何见解,我将不胜感激。
编辑:
例如,下面的查询:
const traversal = this.__.addV(label) .property(GREMLIN_ID, id) .property("created_timestamp", new Date().getTime()); this.logger.info("Add vertex if not exist ");
const v = await this.g .V(id) .fold() .coalesce(this.__.unfold(), traversal) .elementMap() .next();
return v.value;
只有当新顶点不存在时才会添加它;但是,当它确实被执行时,想知道是否有办法查看由于查询执行而添加的“新”节点的数量。
更新:
使用 Kevin 的解决方案,也能够检索边数:
g.inject(0).store('edgeCount').coalesce(
V('0000x', 'facade00-0000-4000-a000-000000000000')
.hasLabel("FINGERPRINT")
.outE()
.where(V().with('0000x', 'facade00-0000-4000-a000-000000000000')),
V('0000x', 'facade00-0000-4000-a000-000000000000')
.hasLabel("FINGERPRINT")
.as("from")
.V('0000x', 'facade00-0000-4000-a000-000000000000')
.hasLabel("RDC_VISITOR_ID")
.as("to")
.addE("ANONYMOUS")
.from("from")
.to("to")
.sideEffect(constant(1).store('edgeCount'))
).project('edge','count').by().by(cap('edgeCount').unfold().sum())
这给出:
{'edge': e[191][0000x-ANONYMOUS->facade00-0000-4000-a000-000000000000], 'count': 1}
随着进一步的执行,计数变为 0
。谢谢!
这是一种使用 store
跟踪查询完成的工作的方法。我无法使用 sack
让它按照我想要的方式工作。如果我弄明白了,我会更新答案。
计数应该是 1,因为我们正在创建一个新顶点。
gremlin> g.inject(0).store('x').
......1> V('A1').
......2> fold().
......3> coalesce(
......4> unfold(),
......5> addV('test').property(id,'A1').sideEffect(constant(1).store('x'))).
......6> project('vertex','count').
......7> by().
......8> by(cap('x').unfold().sum())
==>[vertex:v[A1],count:1]
现在已经创建,所以计数应该是0。
gremlin> g.inject(0).store('x').
......1> V('A1').
......2> fold().
......3> coalesce(
......4> unfold(),
......5> addV('test').property(id,'A1').sideEffect(constant(1).store('x'))).
......6> project('vertex','count').
......7> by().
......8> by(cap('x').unfold().sum())
==>[vertex:v[A1],count:0]
OpenCypher 提供有关作为查询执行结果创建的节点数或更新的边数的统计信息:
queryResult.summary?.updateStatistics?.updates()?.nodesCreated
我正在尝试寻找 Gremlin 是否有类似的机制; explain/profile API return 谓词但不是 edges/nodes 受影响人数的信息。
如果有任何见解,我将不胜感激。
编辑: 例如,下面的查询:
const traversal = this.__.addV(label) .property(GREMLIN_ID, id) .property("created_timestamp", new Date().getTime()); this.logger.info("Add vertex if not exist ");
const v = await this.g .V(id) .fold() .coalesce(this.__.unfold(), traversal) .elementMap() .next();
return v.value;
只有当新顶点不存在时才会添加它;但是,当它确实被执行时,想知道是否有办法查看由于查询执行而添加的“新”节点的数量。
更新: 使用 Kevin 的解决方案,也能够检索边数:
g.inject(0).store('edgeCount').coalesce(
V('0000x', 'facade00-0000-4000-a000-000000000000')
.hasLabel("FINGERPRINT")
.outE()
.where(V().with('0000x', 'facade00-0000-4000-a000-000000000000')),
V('0000x', 'facade00-0000-4000-a000-000000000000')
.hasLabel("FINGERPRINT")
.as("from")
.V('0000x', 'facade00-0000-4000-a000-000000000000')
.hasLabel("RDC_VISITOR_ID")
.as("to")
.addE("ANONYMOUS")
.from("from")
.to("to")
.sideEffect(constant(1).store('edgeCount'))
).project('edge','count').by().by(cap('edgeCount').unfold().sum())
这给出:
{'edge': e[191][0000x-ANONYMOUS->facade00-0000-4000-a000-000000000000], 'count': 1}
随着进一步的执行,计数变为 0
。谢谢!
这是一种使用 store
跟踪查询完成的工作的方法。我无法使用 sack
让它按照我想要的方式工作。如果我弄明白了,我会更新答案。
计数应该是 1,因为我们正在创建一个新顶点。
gremlin> g.inject(0).store('x').
......1> V('A1').
......2> fold().
......3> coalesce(
......4> unfold(),
......5> addV('test').property(id,'A1').sideEffect(constant(1).store('x'))).
......6> project('vertex','count').
......7> by().
......8> by(cap('x').unfold().sum())
==>[vertex:v[A1],count:1]
现在已经创建,所以计数应该是0。
gremlin> g.inject(0).store('x').
......1> V('A1').
......2> fold().
......3> coalesce(
......4> unfold(),
......5> addV('test').property(id,'A1').sideEffect(constant(1).store('x'))).
......6> project('vertex','count').
......7> by().
......8> by(cap('x').unfold().sum())
==>[vertex:v[A1],count:0]