Cassandra BETWEEN & ORDER BY 操作

标签 cassandra

我想在 Cassandra-0.7.8 上使用 ASC/DSC 顺序执行 BETWEEN、ORDER BY 等 SQL 操作。

据我所知,Cassandra-0.7.8 不直接支持这些操作。请告诉我是否有一种方法可以通过调整二级索引来实现这些目标?

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

Emp(KS){
    User(CF):{
         bsanderson(RowKey): { eno, name, dept, dob, email }
     prothfuss(RowKey): { eno, name, dept, dob, email }
}
}

查询:

 - Select * from emp where dept='IT' ORDER BY dob ASC. 
 - Select * from emp where eno BETWEEN ? AND ? ORDER BY dob ASC.

提前致谢。

问候,

塔米扎南尔

最佳答案

Select * from emp where dept='IT' ORDER BY dob ASC.

您可以使用内置的二级索引来选择“部门”列具有特定值的行。但是,行将按照分区程序(RandomPartitioner 或 OrderPreservingPartitioner)确定的顺序返回。要按任意值(例如 DOB)排序,您需要在客户端进行排序。

或者,您可以通过为每个部门设置一行,为每个员工设置一列,按 DOB 键控(并因此排序)来直接支持此查询。但要小心共同生日!并且您仍然需要后续查询来检索所选员工的其他数据(您的 SELECT * 的结果),除非您进行非规范化以便所需数据也存储在索引中。

Select * from emp where eno BETWEEN ? AND ? ORDER BY dob ASC.

Cassandra 中的二级索引查询需要至少一个相等项,所以我认为你可以做 dept='IT' AND eno >=X AND eno <=y,但不仅仅是一个 BETWEEN 风格的查询。

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

关于Cassandra BETWEEN & ORDER BY 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7255734/

相关文章:

python - Pylons Web 应用程序中的唯一用户 ID

caching - Cassandra:激活列族的行缓存似乎失败

java - 从 Java 访问 Cassandra MBean 时出错

c++ - 服务器端警告 : Aggregation query used without partition key

hadoop - ColumnFamilyInputFormat - 无法获取输入拆分

python - AWS Lambda (python) 中的 Cassandra 数据库 session 重用

Docker - Cassandra

python - Pyspark Cassandra - 为类型为 "struct"的 Spark 数据帧列创建正确的用户定义类型 (UDT)

cassandra - 为什么我的 Cassandra 节点在加入环时卡住了?

join - Cassandra 非规范化数据模型