如何按cassandra中的二级索引或列对结果排序?

fumotvh3  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(392)

我希望建立一个表,使我能够过滤行的时间戳和地区。以下是我的资料:

CREATE TABLE event_start(  
        user_id text,  
        ts timestamp,  
        region text,  
        PRIMARY KEY(ts, region)  
    )  
    WITH CLUSTERING ORDER BY(region DESC);

当我尝试按区域选择并排序结果时,遇到“仅当分区键受eq或in限制时才支持排序方式”。我想我理解错误消息,但我在构思解决方案时遇到了问题。这与主键和集群键有关吗?
谢谢!

nnsrf1az

nnsrf1az1#

不能通过聚集列直接查询此表。必须提供分区密钥(ts)。
您可以不使用分区键进行查询–只能通过聚集列进行查询:但它会导致cassandra扫描所有分区!!!!为此,您需要在查询中附加allow filtering。
查询顺序如下:
首先–必须提供分区密钥
聚类列可以跟在后面
它可以对集群列执行相等(=)或范围查询
所有的平等比较必须先于不平等比较
范围搜索是二进制搜索,然后是线性读取
可以还原键列以满足查询:

CREATE TABLE event_start(  
      user_id text,  
      ts timestamp,  
      region text,  
      PRIMARY KEY(region, ts)  
  );

相关问题