如何按 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查询:ReadTimeout:code = 1200