如何在 Cassandra 中按二级索引或列对结果进行排序



我希望构建一个表,该表将允许我按时间戳和区域过滤行。这是我在下面看到的:

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

当我尝试按区域选择和排序结果时,我遇到了"仅当分区键受 EQ 或 IN 限制时,才支持 ORDER BY"。我想我理解错误消息,但我无法构思解决方案。这是否与主键与群集键有关?

谢谢!

不能通过聚类分析列直接查询此表。必须提供分区键。

可以在没有分区键的情况下进行查询 - 只能通过聚类列:但它会导致 Cassandra 扫描所有分区!!!为此,您需要在查询中附加允许过滤

以下是查询顺序:

  1. 首先 – 必须提供分区键
  2. 聚类列可以在之后进行
  3. 它可以对聚类列执行相等(=( 或范围查询
  4. 所有相等比较都必须在不平等比较之前进行
  5. 范围搜索是二分搜索,然后是线性读数

您可以还原键列以满足查询:

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

最新更新