Cassandra的PRIMARY KEY有两个部分:

>分区键

>群集密钥

PRIMARY KEY(partitionKey1,clusteringKey1,clusteringKey2)

要么

PRIMARY KEY((partitionKey1,partitionKey2),clusteringKey1,clusteringKey2)

分区键确定您的数据存储在哪个节点上.群集键确定分区键中数据的顺序.

在CQL中,ORDER BY子句实际上仅用于反转群集顺序的已定义排序方向.对于列本身,您只能在创建表时指定CLUSTERING ORDER BY子句中定义的列(并按照确切的顺序…不跳过).因此,您无法选择任意列来在查询时对结果集进行排序.

Cassandra通过使用聚类键对磁盘上的数据进行排序来实现性能,从而仅在单次读取中返回有序行(无随机读取).这就是您必须使用Cassandra采用基于查询的建模方法(通常将数据复制到多个查询表中)的原因.提前了解您的问题,并构建表格以便为其提供服务.

Select * from emp order by empno;

首先,您需要一个WHERE子句.如果你正在使用关系数据库,没有它可以查询.使用Cassandra,您应该尽力避免未绑定的SELECT查询.此外,Cassandra只能在分区中强制执行排序顺序,因此无论如何,在没有WHERE子句的情况下查询将不会按照您想要的顺序返回数据.

其次,如上所述,您需要定义群集密钥.如果要按empno订购结果集,则必须找到另一列来定义分区键.尝试这样的事情:

CREATE TABLE emp_by_dept (

empno text,

dept text,

name text,

PRIMARY KEY (dept,empno)

) WITH CLUSTERING ORDER BY (empno ASC);

现在,我可以按部门查询员工,他们将按照empno的要求返回给我:

SELECT * FROM emp_by_dept WHERE dept='IT';

但要明确的是,您将无法查询表中的每一行,并按单列排序.获得有意义的订单到结果集的唯一方法是首先以对业务案例有意义的方式对数据进行分区.运行未绑定的SELECT将返回所有行(假设查询在尝试查询集群中的每个节点时没有超时),但结果集排序只能在分区内强制执行.所以你必须通过分区键来限制,以便有意义.

我为自我推销道歉,但去年我为DataStax写了一篇名为We Shall Have Order!的文章,其中我提到了如何解决这些类型的问题.给它一个阅读,看看它是否有帮助.

编辑其他问题:

From your answer I concluded 2 things about Cassandra:

(1) There is no

way of getting a result set which is only order by a column that has

been defined as Unique.

(2) When we define a PK

(partition-key+clustering-key), then the results will always be order

by Clustering columns within any fixed partition key (we must restrict

to one partition-key value), that means there is no need of ORDER BY

clause, since it cannot ever change the order of rows (the order in

which rows are actually stored), i.e. Order By is useless.

1)Cassandra中的所有PRIMARY KEY都是独一无二的.您无法通过分区键来订购结果集.在我的例子中,我按empno排序(在dept之后进行分区). – Aaron 1小时前

2)没有说ORDER BY是无用的,我会说它唯一真正的用途是在ASC和DESC之间切换你的排序方向.

I created an index on “empno” column of “emp” table, it is still not

allowing ORDER BY empno. So, what Indexes are for? are they only for

searching records for specific value of index key?

您无法通过索引列对结果集进行排序.辅助索引(与其关系对应物不同)实际上仅对边缘情况,基于分析的查询有用.它们不会扩展,因此一般建议不要使用二级索引.

Ok, that simply means that one table cannot be used for getting

different result sets with different conditions and different sorting

order.

正确.

Hence for each new requirement, we need to create a new table.

IT means if we have a billion rows in a table (say Sales table), and

we need sum of sales (1) Product-wise, (2) Region-wise, then we will

duplicate all those billion rows in 2 tables with one in clustering

order of Product, the other in clustering order of Region,. and even

if we need to sum sales per Salesman_id, then we build a 3rd table,

again putting all those billion rows? is it sensible?

你真的要决定它是多么明智.但缺乏查询灵活性是Cassandra的缺点.为了解决这个问题,您可以继续创建查询表(I.E.,交易磁盘以获得性能).但是如果它变得笨拙或难以管理,那么现在是时候考虑Cassandra是否真的是正确的解决方案.

编辑20160321

Hi Aaron, you said above “Stopping short of saying that ORDER BY is useless, I’ll say that its only real use is to switch your sort direction between ASC and DESC.”

But i found even that is not correct. Cassandra only allows ORDER by in the same direction as we define in the “CLUSTERING ORDER BY” caluse of CREATE TABLE. If in that clause we define ASC, it allows only order by ASC, and vice versa.

没有看到错误消息,很难知道在那个消息上告诉你什么.虽然在分区中存储了太多行时,我听说ORDER BY的查询失败了.

如果指定多个列进行排序,则ORDER BY的功能有点奇怪.如果我定义了两个聚类列,我可以不加选择地在第一列上使用ORDER BY.但是只要我将第二列添加到ORDER BY子句中,只有在指定两个排序方向相同(如CLUSTERING ORDER BY定义)或两者都不同时,我的查询才有效.如果我混合搭配,我得到这个:

InvalidRequest: code=2200 [Invalid query] message="Unsupported order by relation"

我认为这与数据如何存储在磁盘上有关.否则,Cassandra在准备结果集方面还有很多工作要做.然而,如果它要求所有内容匹配或镜像在CLUSTERING ORDER BY中指定的方向,它只能从磁盘中继顺序读取.因此,最好只在ORDER BY子句中使用单个列,以获得更可预测的结果.

cql oracle,Cassandra CQL中的Where和Order By子句相关推荐

  1. oracle map order,oracle面向对象技术中的map和order方法有何不同?

    MAP方法MAP方法用于将对象实例映射为标量数值(NUMBER,DATE,VARCHAR2等):对于相同对象类型不同对象实例来说,因为他们的数据类型是复合数据类型,所以对象实例之间不能直接进行比较.为 ...

  2. Cassandra_教程二_利用 CQL 操作 Cassandra

    Cassandra 可以使用 cqlsh 进行管理, 使用的语法格式为 CQL. cqlsh位于Cassandra的bin目录,cqlsh需要python支持.在使用cqlsh 之前需要安装pytho ...

  3. cql oracle,执行简单的CQL操作

    CQL是Cassandra Query Language的缩写,目前作为Cassandra默认并且主要的交互接口.CQL和SQL比较类似,主要的区别是Cassandra不支持join或子查询,除了支持 ...

  4. oracle 求A中不存在于B的记录

    oracle 求A中不存在于B的记录 select * from a minus select * from b  是求A中不存在于B的记录 select * from a union select ...

  5. oracle数据库有哪些文件构成,Oracle数据库架构中包括几层?每层都有什么元素?...

    Oracle数据库架构中包括几层?每层都有 什么元素? 1 PL/SQL代表 A PROCEDURAL LANGUAGE/SQL B PROGRAM LANGUAGE SQL C POWER LANG ...

  6. rowbounds分页oracle,Oracle使用MyBatis中RowBounds实现分页查询功能

    Oracle中分页查询因为存在伪列rownum,sql语句写起来较为复杂,现在介绍一种通过使用MyBatis中的RowBounds进行分页查询,非常方便. 使用MyBatis中的RowBounds进行 ...

  7. oracle sql语句中包含‘’ 的解决方法

    oracle sql语句中包含'&' 的解决方法 参考文章: (1)oracle sql语句中包含'&' 的解决方法 (2)https://www.cnblogs.com/hm1990 ...

  8. oracle返回表id,在Oracle的函数中,返回表类型的语句

    Oracle的function中怎么返回表变量? 太晚了,过多的理论知识就不说了,下面简单地说实现吧!.. 1.创建表对象类型. 在Oracle中想要返回表对象,必须自定义一个表类型,如下所示: 复制 ...

  9. oracle set feedback off,Oracle数据库之Oracle导出数据中的prompt,set feedback 等是什么意思...

    本文主要向大家介绍了Oracle数据库之Oracle导出数据中的prompt,set feedback 等是什么意思,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. mpt 输出 ...

最新文章

  1. 内嵌iframe撑高父容器,底部有4px留白问题解决办法
  2. 计算机win7分盘,win7电脑如何分盘
  3. 读取剪贴板英语转换为国际莫斯码
  4. (71)FPGA面试题-使用不同的代码实现2-4译码器?使用case语句
  5. 使用计算机打印汉子文档,电子科技大学《计算机应用基础(本科)》20春期末考试【标准答案】...
  6. 以太坊 solidity 函数的完整声明格式
  7. Python源码保护
  8. 高通Camera驱动配置参考:dtsi、代码
  9. MySQL报错:ERROR 3546 (HY000): @@GLOBAL.GTID_PURGED cannot be changed: the new value must be a superset
  10. 中国塑料加工工业协会侵犯群益公司名誉权 法院判决赔偿财产损失和赔礼道歉30天
  11. 手机vnc远程控制软件,2步完成手机vnc远程控制软件的安装和使用
  12. 基于MFFMB的电商评论文本分类研究
  13. Elasticsearch 地理位置查询
  14. css 三栏布局 圣杯布局 双飞翼 flex
  15. 一篇文章带你深入理解 Java 中的Class.getClassLoader
  16. V2.0 版本的 《JavaGuide面试突击版》来啦!带着它的在线阅读版本来啦!
  17. L2UWE: A Framework for the Efficient Enhancement of Low-Light Underwater Images阅读札记
  18. 低学历者已无法生存 程序员尤其明显
  19. 凭什么都是Java开发三年,而他能进大厂薪资是“我”2倍?
  20. 寻找志同道合者共同成立写作小组

热门文章

  1. OCR文字识别谁最好?4款拍照扫描应用横向对比
  2. teradata中no more spool space
  3. iOS视频编辑SDK
  4. 移动硬盘损坏,数据能恢复吗
  5. Unity 简单TCP通信实现
  6. seleniumbase学习总结6 - 落地常见问题
  7. 5.20爬虫结——Mu
  8. iphone8位置无法连接服务器,iphone8无法连接到app store怎么办?苹果iphone8连接不到app store解决方法...
  9. 华为测试心率软件,华为运动健康如何测心率 华为运动健康测心率方法
  10. pytho中的json序列化与反序列化操作