快捷搜索:  汽车  科技

Gremlin中查询单个点的信息,Gremlin学习--图的汇总与分组统计计算

Gremlin中查询单个点的信息,Gremlin学习--图的汇总与分组统计计算sum()gremlin语句图的schema定义及数据,请参见:HugeGraph图数据库--你可能还不知道的操作(https://blog.csdn.net/penriver/article/details/115201598) 或 通过Gremlin语言构建关系图并进行图分析(https://blog.csdn.net/javeme/article/details/82385829)Gremlin可以在Number类型的流(遍历器)上做简单的统计运算,包括计算总和、最大值、最小值、均值 即sum max min mean操作

随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,亟需一种支持海量复杂数据关系运算的数据库即图数据库。本系列文章是学习知识图谱以及图数据库相关的知识梳理与总结

本文会包含如下内容:

  • 学习边的遍历操作
  • 边遍历概念
  • 边遍历操作示例

本篇文章适合人群:架构师、技术专家、对知识图谱与图数据库感兴趣的高级工程师

1. 使用的图数据

所有的操作基于Gremlin语言构建关系图进行

图的schema定义及数据,请参见:HugeGraph图数据库--你可能还不知道的操作(
https://blog.csdn.net/penriver/article/details/115201598) 或 通过Gremlin语言构建关系图并进行图分析(https://blog.csdn.net/javeme/article/details/82385829)

Gremlin中查询单个点的信息,Gremlin学习--图的汇总与分组统计计算(1)

2.图的汇总计算

Gremlin可以在Number类型的流(遍历器)上做简单的统计运算,包括计算总和、最大值、最小值、均值 即sum max min mean

操作

gremlin语句

sum()

g.V().hasLabel('person').values('age').sum()

  • group(): 对结果集进行分组,可通过by(property)来指定根据什么维度进行分组,可称维度为分组键;如果不指定维度则以元素id作为分组键,相当于重复的元素被分为一组。每一组由分组键 组内元素列表构成。如果有需要也可对每一组的元素列表进行reduce操作,依然使用by()语句,如by(count())对组内元素计数。
  • groupCount(): 对结果集进行分组,并统计每一组的元素个数。每一组由分组键 组内元素数量构成。
  • dedup(): 去除结果集中相同的元素,可通过by(property)来指定根据什么维度进行去重。
  • by(): 语义上一般指“根据什么维度”,与上述语句配合使用,如group().by()等。也可与其它语句配合,如前面讲到的排序order().by()及路径path().by()等。
  • 操作

    gremlin语句

    统计不同年龄的人数

    g.V().hasLabel('person').group()

    .by('age').by(count())

    按年龄段统计人数

    g.V().hasLabel('person').groupCount()

    .by(values('age').math('floor(_/10)*10')) .order(local).by(values desc)

    按地址统计年龄的不同指标

    g.V().hasLabel('person').group()

    .by('addr').by(values('age').sum())

    //sum可以换成max min mean聚合函数

    统计人的出边数

    g.V().hasLabel('person')

    .map(outE().count())

    去重统计

    //不去重的情况下,统计结果会有重复,结果是不对的

    g.V().both().hasLabel('person')

    .dedup().groupCount().by('age')

    g.V().both().hasLabel('person')

    .groupCount().by('age')

    注意:

    在Gremlin中有一个专门负责科学计算功能的step math()。 math() 不同于常见的函数组合和嵌套形式,提供了一种易于读取的基于字符串的数学处理器。

    math() 支持by(),其中多个by() 按照在math()运算表达式中首次引用变量的顺序应用。保留变量_是指传入math()的当前遍历器对象。math()支持的运算符包括: ,-,*,/等

    有关math() step的更多资料,请参考:TinkerPop官网对于math()step的实例说明

    猜您喜欢: