存储 gremlin 计数值并稍后在遍历中进行比较
Storing gremlin count values and comparing later in traversal
我是 Gremlin 的新手,刚开始使用 it.I 有一个图,其中每个顶点都有一个 属性 Referenceable.qualifiedName 和 __typeName.
'__typeName'作为'avro_schema'和'avro_field'的顶点之间的边标签是'__avro_record.fields' 并且 'avro_schema'(1) 和 'avro_field'(many) 之间存在一对多关系。
带有'__typeName'的顶点之间的边标签为'avro_field'和'DataClassification'是'classifiedAs' 并且 'avro_field'(1) 和 'DataClassification'(many) 之间存在一对多关系。
我想找出图中所有 'avro_schema' 个顶点 属性 'Referenceable.qualifiedName',其中每个 'avro_field' 与 'DataClassification'
我尝试了 gremlin 查询来找出给定的特定 avro_schema 找出与 DataClassification 通过 classifiedAs 有关系的 avro_field 的数量。这样可行。
但我无法计算 avro_schema 到 avro_field 之间的边数,然后与 avro_field 的数量进行比较,这与 DataClassification 类型有关。
这给出了分类的数量avro_field for a give avro_schema
g.V().has('__typeName','avro_schema').has('Referenceable.qualifiedName' , "com.example.avro.test2Complicated16").outE('__avro_record.fields').inV().out('classifiedAs').has('__typeName','tDataClassification').count()
我也尝试过聚合所有满足条件的 avro_schema,但它不起作用。
g.V().has('__typeName','avro_schema').where(identity().out('__avro_record.fields').store('sumi').out('classifiedAs').has('__typeName','DataClassification').count().is(eq('sumi'.size()))).values('Referenceable.qualifiedName')
我想知道所有 avro_schema,其中所有 avro_field 与 DataClassification
有任何 'classifiedAs' 边关系
在进一步尝试时,我开始进行查询,但集合 'xm' 的大小始终返回为 0。
g.V().has('__typeName','avro_schema').local(out('__avro_record.fields').store('xm').local(out('classifiedAs').has('__typeName', 'DataClassification').count().is(eq(1))).count().is(eq(select('xm').size())))
不确定我是否正确地遵循了问题描述,但对于您可能正在寻找的遍历,这里有一个大胆的猜测:
g.V().has('__typeName','avro_schema').not(
out('__avro_record.fields').
out('classifiedAs').has('__typeName',neq('DataClassification'))).
values('Referenceable.qualifiedName')
更新
// at least one __avro_record.fields relation
g.V().has('__typeName','avro_schema').filter(
out('__avro_record.fields').
groupCount().
by(choose(out('classifiedAs').has('__typeName','DataClassification'),
constant('y'), constant('n'))).
and(select('y'), __.not(select('n')))).
values('Referenceable.qualifiedName')
// include avro_schema w/o __avro_record.fields relations
g.V().has('__typeName','avro_schema').not(
out('__avro_record.fields').
groupCount().
by(choose(out('classifiedAs').has('__typeName','DataClassification'),
constant('y'), constant('n'))).
select('n')).
values('Referenceable.qualifiedName')
我是 Gremlin 的新手,刚开始使用 it.I 有一个图,其中每个顶点都有一个 属性 Referenceable.qualifiedName 和 __typeName.
'__typeName'作为'avro_schema'和'avro_field'的顶点之间的边标签是'__avro_record.fields' 并且 'avro_schema'(1) 和 'avro_field'(many) 之间存在一对多关系。
带有'__typeName'的顶点之间的边标签为'avro_field'和'DataClassification'是'classifiedAs' 并且 'avro_field'(1) 和 'DataClassification'(many) 之间存在一对多关系。
我想找出图中所有 'avro_schema' 个顶点 属性 'Referenceable.qualifiedName',其中每个 'avro_field' 与 'DataClassification'
我尝试了 gremlin 查询来找出给定的特定 avro_schema 找出与 DataClassification 通过 classifiedAs 有关系的 avro_field 的数量。这样可行。
但我无法计算 avro_schema 到 avro_field 之间的边数,然后与 avro_field 的数量进行比较,这与 DataClassification 类型有关。
这给出了分类的数量avro_field for a give avro_schema
g.V().has('__typeName','avro_schema').has('Referenceable.qualifiedName' , "com.example.avro.test2Complicated16").outE('__avro_record.fields').inV().out('classifiedAs').has('__typeName','tDataClassification').count()
我也尝试过聚合所有满足条件的 avro_schema,但它不起作用。
g.V().has('__typeName','avro_schema').where(identity().out('__avro_record.fields').store('sumi').out('classifiedAs').has('__typeName','DataClassification').count().is(eq('sumi'.size()))).values('Referenceable.qualifiedName')
我想知道所有 avro_schema,其中所有 avro_field 与 DataClassification
有任何 'classifiedAs' 边关系在进一步尝试时,我开始进行查询,但集合 'xm' 的大小始终返回为 0。
g.V().has('__typeName','avro_schema').local(out('__avro_record.fields').store('xm').local(out('classifiedAs').has('__typeName', 'DataClassification').count().is(eq(1))).count().is(eq(select('xm').size())))
不确定我是否正确地遵循了问题描述,但对于您可能正在寻找的遍历,这里有一个大胆的猜测:
g.V().has('__typeName','avro_schema').not(
out('__avro_record.fields').
out('classifiedAs').has('__typeName',neq('DataClassification'))).
values('Referenceable.qualifiedName')
更新
// at least one __avro_record.fields relation
g.V().has('__typeName','avro_schema').filter(
out('__avro_record.fields').
groupCount().
by(choose(out('classifiedAs').has('__typeName','DataClassification'),
constant('y'), constant('n'))).
and(select('y'), __.not(select('n')))).
values('Referenceable.qualifiedName')
// include avro_schema w/o __avro_record.fields relations
g.V().has('__typeName','avro_schema').not(
out('__avro_record.fields').
groupCount().
by(choose(out('classifiedAs').has('__typeName','DataClassification'),
constant('y'), constant('n'))).
select('n')).
values('Referenceable.qualifiedName')