Amazon Neptune中Gremlin按月份分组求和的问题求助
Amazon Neptune Gremlin分组求和解决方案
问题背景
需要按monthName属性对计算得到的mathResult字段分组求和,现有分组查询能得到各月份的数值列表,但使用values('mathResult').sum()时触发UnsupportedOperationException错误。
错误原因
Amazon Neptune的Gremlin实现不支持values('mathResult').sum()这种嵌套聚合的写法,需调整聚合步骤的语法。
正确查询语句
方式一:直接在分组中聚合求和
使用sum().by('mathResult')作为分组的第二个by参数,直接对每个分组的mathResult求和:
g.V().hasLabel('Customer').out().hasLabel('Workspace') .has('lastUpdatedOn').has('createdOn') .project('gp1','var1','var2') .by(values('lastUpdatedOn_MN')) .by(values('createdOn')) .by(values('lastUpdatedOn')) .project('mathResult','monthName') .by(math('var2-var1')) .by('gp1') .group().by('monthName').by(sum().by('mathResult'))
方式二:先分组再映射求和
如果方式一存在兼容性问题,可先分组得到数值列表,再通过map步骤对每个列表求和:
g.V().hasLabel('Customer').out().hasLabel('Workspace') .has('lastUpdatedOn').has('createdOn') .project('gp1','var1','var2') .by(values('lastUpdatedOn_MN')) .by(values('createdOn')) .by(values('lastUpdatedOn')) .project('mathResult','monthName') .by(math('var2-var1')) .by('gp1') .group().by('monthName').by('mathResult') .map(entry -> entry.setValue(entry.getValue().sum()))
预期输出
执行上述查询后,将得到各月份的求和结果:
{ "MARCH": 394759.0, "FEBRUARY": 23820301.0 }
内容的提问来源于stack exchange,提问作者Shirshendu Shekhar Das
相关产品推荐
相关产品推荐

