为什么不能将辅助索引(=?)和聚类列(排序依据)一起用于CQL查询?

时间:2018-10-10 00:14:04

标签: cassandra cassandra-3.0

编辑:相关的吉拉ticket

模式select * from <table> where <partition_keys> = ? and <secondary_index_column> = ? order by <first_clustering_column> desc中的查询不起作用,错误消息味精:

InvalidRequest: Error from server: code=2200 [Invalid query] message="ORDER BY with 2ndary indexes is not supported."

在索引表的structure中,上述查询包括分区键和索引表中的前两个群集列。另外,请注意,如果没有order by子句,则结果将按聚簇列排序为CLUSTERING ORDER。

有什么办法可以使查询工作?如果没有,为什么?

1 个答案:

答案 0 :(得分:1)

Cassandra中的数据自然根据“聚类列”的排序顺序存储。

Cassandra中的二级索引与关系数据库中的相应索引有很大不同。它的本地每个节点,这意味着群集的其他节点不知道其内容。因此,按此索引排序是非常不可能的。同样在节点内,二级索引仅保留指向相应分区键的指针。

如果需要由Cassandra执行排序,请将它们作为聚类列。否则,您可以在检索结果后按代码对它们进行排序。

二级索引也不是Cassandra的理想选择,并且绝对更好的模型是不要将它们放在第一位,以免为将来带来麻烦。