【问题标题】:Gremlin python aggregate dataGremlin python 聚合数据
【发布时间】:2021-03-05 17:08:38
【问题描述】:

我想提取汇总数据,例如:

{category: 
     item: total_items
}

但我无法聚合多个属性。

我写了这个查询:

g.V().hasLabel('invoice').\
where(__.out('created_in').hasLabel('year').has('value', between(2020, 2021))).\
where(__.out('created_in').hasLabel('month').has('value', between(10, 12))).\
out('has_item').has('category', 'Technology').\
groupCount().by('name').\
order(Scope.local).by(Column.values, Order.desc).\
toList()

通过这个查询,我可以提取:

{item: total_items}

但是我怎样才能在这个结果中添加类别呢?在 groupCount 之后,我没有更多的信息。 谢谢。

【问题讨论】:

  • 您能否提供一些addVaddE 步骤来创建一个小样本图以及您需要从该图中获得的预期结果?我怀疑您需要做的只是嵌套两个group 步骤,但一些示例数据将有助于提供满足您需要的查询。下面是一个快速创建示例图的示例:kelvinlawrence.net/book/PracticalGremlin.html#btree

标签: python aggregate gremlin


【解决方案1】:

您可以嵌套任意数量的group 步骤。这应该可以正常工作:

g.V().hasLabel('invoice').
  where(__.out('created_in').hasLabel('year').has('value', between(2020, 2021))).
  where(__.out('created_in').hasLabel('month').has('value', between(10, 12))).
  out('has_item').
  group().
    by('category').
    by(__.groupCount().by('name').
          order(Scope.local).
            by(Column.values, Order.desc))

【讨论】:

  • 谢谢,这正是我想要的……如果我也想要一年的聚合,我必须在 out 之前添加一个项目功能?
  • 你想要[year: [category: [name: count]]]还是[category: [year: [name: count]]]
  • 是的,正是我想要的。
【解决方案2】:

这是丹尼尔的一个有趣的建议。 我正在寻找类似的东西,但我被卡住了,可能与 Dav04 类似的问题.. 例如,通过使用类似的查询:

g.V().hasLabel('invoice').\
where(__.out('created_in').hasLabel('year').has('value', between(2020, 2021))).\
where(__.out('created_in').hasLabel('month').has('value', between(10, 12))).as_('v').\
out('has_item').\
group().\
by(__.select('v').out('created_in').hasLabel('year').values('value')).\
by('category').\
by(__.groupCount().by('name').order(Scope.local).by(Column.values, Order.desc).range(Scope.local, 0,6)).\
toList()

我正在努力理解如何提取例如以下结果:

[
{
  2018: 
       {'service': [{'SaaS': 8}, {'DBaaS': 20}, {'IAM': 794}],
        'product': [{'Java Course': 8}, {'DB Course': 20}],
  2019: 
       {'service': [{'SaaS': 10}, {'DBaaS': XYZ}, {'IAM': XYZ}],
        'product': [{'Java Course': XYZ}, {'DB Course': XYZ}]  
}

]

【讨论】:

  • 嗨 - 如果您可以使用新帖子提出问题而不是在答案中提出问题会更好,否则事情会变得有点混乱。此外,如果您可以通过addVaddE 步骤提供一些示例数据,它总是可以帮助人们测试他们的答案。
猜你喜欢
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多