首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cassandra ORDER &ORDER BY运算

Cassandra ORDER &ORDER BY运算
EN

Stack Overflow用户
提问于 2011-08-31 18:35:11
回答 2查看 16.1K关注 0票数 3

我想在Cassandra-0.7.8上使用ASC/DSC ORDER执行诸如BETWEEN、order BY之类的SQL操作。

据我所知,Cassandra-0.7.8对这些操作没有直接支持。请让我知道有没有办法通过调整二级索引来完成这些任务?

下面是我的数据模型设计。

代码语言:javascript
复制
Emp(KS){
    User(CF):{
         bsanderson(RowKey): { eno, name, dept, dob, email }
     prothfuss(RowKey): { eno, name, dept, dob, email }
}
}

查询:

代码语言:javascript
复制
 - Select * from emp where dept='IT' ORDER BY dob ASC. 
 - Select * from emp where eno BETWEEN ? AND ? ORDER BY dob ASC.

提前谢谢。

致以敬意,

Thamizhananl

EN

回答 2

Stack Overflow用户

发布于 2011-09-01 15:44:08

代码语言:javascript
复制
Select * from emp where dept='IT' ORDER BY dob ASC.

通过使用内置的二级索引,您可以选择'dept‘列具有特定值的行。但是,这些行将按分区程序(RandomPartitioner或OrderPreservingPartitioner)确定的顺序返回。要按任意值排序,例如道布,您需要在客户端进行排序。

或者,您可以直接支持此查询,方法是为每个部门分配一行,为每个员工分配一列,并由道布键入关键字(因此进行排序)。但是要小心共享的生日!而且,您仍然需要后续查询来检索所选员工的其他数据( SELECT *的结果),除非您进行了反规范化,以便将所需的数据也存储在索引中。

代码语言:javascript
复制
Select * from emp where eno BETWEEN ? AND ? ORDER BY dob ASC.

Cassandra中的二级索引查询至少需要一个相等项,所以我认为您可以执行dept='IT‘和eno >=X和eno <=y,但不仅仅是BETWEEN style查询。

为此,您可以创建自己的索引行,为每个员工创建一列,以员工编号为关键字,并使用适当的比较器,以便所有列都按员工编号的顺序自动排序。然后,您可以对该行执行范围查询,以获得匹配的员工列表-但您需要进一步的查询来检索每个员工(道布等)的其他数据,除非您进行了反规范化,以便所需的数据也存储在索引中。您仍然需要在客户端进行道布的订购。

票数 3
EN

Stack Overflow用户

发布于 2013-07-26 19:02:48

据我所知,当您创建列族时,列将按比较器排序,您可以根据自己的意见使用clustring key进行排序,列族中的行将按分区程序排序。我建议您阅读本文

Cassandra权威指南第6章

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7255734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档