cassandra - 如何按 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”。我想我理解错误信息,但我无法构思解决方案。这会与主键与集群键有关吗?
谢谢!
解决方案
您不能通过聚类列直接查询此表。您必须提供分区键(ts)。
您可以在没有分区键的情况下进行查询 - 仅通过集群列:但它会导致 Cassandra 扫描所有分区!!!!为此,您需要在查询中附加ALLOW FILTERING。
以下是查询顺序:
- 首先——必须提供一个分区键
- 聚类列可以跟在后面
- 它可以对聚类列执行相等(=)或范围查询
- 所有的等式比较都必须在不等式比较之前
- 范围搜索是二进制搜索,然后是线性读取
您可以还原您的键列以满足您的查询:
CREATE TABLE event_start(
user_id text,
ts timestamp,
region text,
PRIMARY KEY(region, ts)
);
推荐阅读
- python-3.x - 旧会话 ID 不可用
- php - mysql触发器或事件在一段时间(60秒)后执行更新
- java - 为什么 ArrayList 总是返回最后一个对象?
- visual-studio-code - 将行带到当前行 - VSCode 快捷方式
- bash - 构建连接多个源路径并转换为 Cygwin RSync 执行以复制特定硬链接文件夹树的干净方法?
- oracle - 如何使用输入和输出参数pl/sql获取存储过程的输出
- html - 位置粘性在引导程序 3 中不起作用
- python - 将文件保存到带有嵌套循环索引的pickel作为文件名
- json - 如何在 JSON+LD 头中使用许多不同的数据文件更改 forloop 目标,包括
- excel - 如何编写一个程序来复制特定的单词,然后粘贴该行并在 excel vba 中模仿接下来的 7 行