AWS Neptune中如何基于日期字段的月份名称实现分组统计
实现方法
不需要拆分存储年、月、日这类独立时间属性,AWS Neptune支持的Gremlin语法内置了日期处理能力,可以直接实现和MySQL MONTHNAME() 等价的分组统计逻辑,根据你使用的Neptune引擎版本选对应写法即可。
- 引擎版本1.2.0及以上(兼容Gremlin 3.6+):直接用内置
monthName()步骤提取月份名
// 按月份名分组统计Ticket数量 g.V().hasLabel('Ticket') .group() .by(values('createdOn').monthName()) .by(count()) // 可选:按月份自然顺序排序返回结果 .order(local).by(Column.keys, Order.asc)
返回结果的key为January/February这类标准英文月份名称,value为对应月份的工单总数,逻辑和MySQL的MONTHNAME(createdOn) GROUP BY完全一致。
- 1.2.0以下的低版本引擎:用
dateFormat()步骤通过格式化串提取月份名
g.V().hasLabel('Ticket') .group() .by(values('createdOn').dateFormat('MMMM')) .by(count()) .order(local).by(Column.keys, Order.asc)
这里MMMM是标准日期格式化占位符,会将日期值转换为完整的英文月份名称;如果需要返回其他语言的月份名,给dateFormat()传入对应Locale参数即可。
注意:上述写法要求
createdOn属性存储为Neptune原生支持的日期/时间戳类型,如果存的是自定义格式的日期字符串,需要先通过日期解析步骤转为原生日期类型再做提取,否则函数会执行报错。
如果这个按月统计的报表是高频查询场景,冗余存储月份字段确实能降低运行时计算开销、提升查询速度;但如果是低频统计需求,或者不想修改现有数据结构,上面的写法完全可以满足需求,不需要额外调整存量数据。
内容的提问来源于stack exchange,提问作者Shirshendu Shekhar Das
相关产品推荐
相关产品推荐

