AWS Neptune中Gremlin按不存在的顶点属性排序报错如何解决
你遇到的报错确实是因为部分Asset标签的顶点不存在排序使用的anyprop属性,Gremlin执行排序步骤时无法读取不存在的属性值就会触发该异常。你可以根据业务场景选择以下任意一种方案解决:
方案1:过滤无对应属性的顶点
如果业务允许仅返回携带指定排序属性的顶点,在排序步骤前增加has()筛选即可,动态生成查询时直接带入排序对应的属性名:
g.V().hasLabel('Asset').has('anyprop').order().by('anyprop', decr).valueMap(true)
该方案实现最简单,对查询性能影响最小。
方案2:给无属性顶点设置默认排序值
如果需要返回所有Asset顶点,可通过coalesce()步骤给没有对应属性的顶点指定默认值参与排序:
g.V().hasLabel('Asset').order().by(coalesce(values('anyprop'), constant(null)), decr).valueMap(true)
你可以根据属性类型调整constant()内的默认值,比如数值类属性可以设置为0或极小/极大值,字符串类属性可以设置为空串,以此控制无属性顶点的排序位置。
方案3:开启Neptune专属兼容参数
如果不想修改现有查询逻辑,可以调整Neptune实例的参数组配置,将neptune.enableGremlinOrderByNulls参数设置为true。开启后Neptune会自动将缺少排序属性的顶点按照null值处理,不会抛出异常,默认规则为null值在升序时排在最前,降序时排在最后。
内容的提问来源于stack exchange,提问作者Zhongmin
相关产品推荐
相关产品推荐

