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

Posted

技术标签:

【中文标题】如何按 Cassandra 中的二级索引或列对结果进行排序?【英文标题】:How can I order my results by a secondary index or column in Cassandra? 【发布时间】:2019-02-11 20:29:35 【问题描述】:

我正在寻找一个表格,允许我按时间戳和区域过滤行。这是我下面的内容:

  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”。 我想我理解错误信息,但我无法构思解决方案。这是否与主键与集群键有关?

谢谢!

【问题讨论】:

您能否详细说明您的要求,也许切换分区和集群键可以工作。 【参考方案1】:

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

您可以在没有分区键的情况下进行查询 - 仅通过集群列: 但它会导致 Cassandra 扫描所有分区!!!! 为此,您需要在查询中附加 ALLOW FILTERING

查询顺序如下:

    首先——必须提供一个分区键 聚类列可以跟在 之后 它可以对聚类列执行相等 (=) 或范围查询 所有等式比较都必须在不等式比较之前进行 范围搜索是二进制搜索,然后是线性读取

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

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

【讨论】:

谢谢,我的订单一定是有点偏了。我现在可以使用 ORDER BY 创建表了。

以上是关于如何按 Cassandra 中的二级索引或列对结果进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

Cassandra 使用二级索引按日期过滤

二级索引的Cassandra查询:ReadTimeout:code = 1200

如何在 cassandra 2.0.5 中删除表或列族?

DCE Cassandra 3.9 在加入现有集群期间创建二级索引缓慢

Oracle:如何在获取结果之前按某些列对记录进行分组

如何按列对多维数组进行排序?