我想在 Cassandra-0.7.8 上执行 SQL 操作,例如 BETWEEN、ORDER BY 和 ASC/DSC 顺序。
据我所知,Cassandra-0.7.8 并不直接支持这些操作。请让我知道有没有办法通过调整二级索引来完成这些?
下面是我的数据模型设计。
Emp(KS){
User(CF):{
bsanderson(RowKey): { eno, name, dept, dob, email }
prothfuss(RowKey): { eno, name, dept, dob, email }
}
}
Queries:
- Select * from emp where dept='IT' ORDER BY dob ASC.
- Select * from emp where eno BETWEEN ? AND ? ORDER BY dob ASC.
提前致谢。
Regards,
塔米扎南
Select * from emp where dept='IT' ORDER BY dob ASC.
您可以使用内置二级索引选择“dept”列具有特定值的行。但是,行将按照分区程序(RandomPartitioner 或 OrderPreservingPartitioner)确定的顺序返回。要按任意值(例如 DOB)排序,您需要在客户端进行排序。
或者,您可以直接支持此查询,方法是为每个部门设置一行,为每个员工设置一列,按 DOB 键控(并因此排序)。但要小心共同的生日!并且您仍然需要后续查询来检索所选员工的其他数据(SELECT * 的结果),除非您进行非规范化以便所需的数据也存储在索引中。
Select * from emp where eno BETWEEN ? AND ? ORDER BY dob ASC.
Cassandra 中的二级索引查询至少需要一个等式项,因此我认为您可以执行 dept='IT' AND eno >=X AND eno
您可以通过创建自己的索引行来完成此操作,其中每个员工有一列,以员工编号为键,并使用适当的比较器,以便所有列自动按员工编号顺序排序。然后,您可以对该行执行范围查询以获取匹配员工的列表 - 但您需要进一步查询来检索每个员工的其他数据(出生日期等),除非您进行非规范化以便所需的数据也存储在索引中。您仍然需要在客户端进行 dob 订购。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)