我正在调查使用DSE Graph中的自定义顶点ID进行分区扫描的可能错误。 出于某种原因,按其完整ID选择顶点按预期工作,但检索整个分区会导致全表扫描(即图扫描警告)。
遵循此顶点标签定义:
schema.vertexLabel('word_hoard').partitionKey('_partition').clusteringKey('wordhoard_id').create()
g.V().hasLabel('word_hoard').has('_partition', 'localhost').has('wordhoard_id', '60bcaeff-f6e5-11e5-9ce9-00aaaaaaaaaa')
导致有效的CQL:
SELECT * FROM topics_dev.word_hoard_p
WHERE "_partition" = 'localhost' AND wordhoard_id = 60bcaeff-f6e5-11e5-9ce9-00aaaaaaaaaa;
g.V().hasLabel('word_hoard').has('_partition', 'localhost')
然而,生成的CQL似乎不了解分区键:
SELECT "_partition", "wordhoard_id" FROM "topics_dev"."word_hoard_p"
WHERE "~~vertex_exists" = true
为了避免这种不必要的表扫描,我希望如下:
SELECT * FROM topics_dev.word_hoard_p
WHERE "_partition" = 'localhost';
这个CQL查询运行良好,但我似乎无法使用gremlin遍历生成它。
有没有人有过这个问题的经验?
我应该采用不同的方式,或者这是DSE或tinkerpop中的真正错误吗?
更新:自DSE 6.0.4起,此问题仍然存在