我在Cassandra中创建了一个表,用于监控应用程序的插入。我的分区键是一个int,由年月日组成,我的集群键是一个时间戳,之后是我的用户名和其他一些字段。
我想显示最后5个插入,但似乎分区键位于“order by desc”之前。
怎样才能得到正确的结果?正常的聚类键归纳顺序,为什么我会得到这个结果?(提前致谢)
信息:
Query : select tsp_insert, txt_name from ks_myKeyspace.myTable limit 5;
结果:
idt_day | tsp_insert | txt_name
----------+--------------------------+----------
20161028 | 2016-10-28 15:21:09+0000 | Jean
20161028 | 2016-10-28 15:21:01+0000 | Michel
20161028 | 2016-10-28 15:20:44+0000 | Quentin
20161031 | 2016-10-31 09:24:32+0000 | Jacquie
20161031 | 2016-10-31 09:23:32+0000 | Gabriel
通缉:< br >
idt_day | tsp_insert | txt_name
----------+--------------------------+----------
20161031 | 2016-10-31 09:24:32+0000 | Jacquie
20161031 | 2016-10-31 09:23:32+0000 | Gabriel
20161028 | 2016-10-28 15:21:09+0000 | Jean
20161028 | 2016-10-28 15:21:01+0000 | Michel
20161028 | 2016-10-28 15:20:44+0000 | Quentin
我的表:
CREATE TABLE ks_myKeyspace.myTable(
idt_day int,
tsp_insert timestamp,
txt_name text, ...
PRIMARY KEY (idt_day, tsp_insert)) WITH CLUSTERING ORDER BY (tsp_insert DESC);
在我看来,你把整个事情都搞错了。分区键不用于对数据进行排序,它们仅用于了解数据在集群中的位置,尤其是节点。此外,顺序只在分区内部真正重要...
您的查询结果确实是不可预测的。根据哪个节点的回答速度更快(假设是群集而不是单个节点),每次都可以获得不同的结果。您应该尽量避免在没有分区限制的情况下进行选择,因为它们不会扩展。
但是,您可以更改查询并每天执行一次选择,然后以有序方式查询有序数据(您的聚类键)(您手动选择查询中的天数顺序)。顺便说一下,它会更快,因为您可以并行查询多个分区。
最终,您看到的是当前订单,因为您没有使用<code>WHERE</code>子句。如果在分区键上使用标记
函数,您可以看到发生了什么:
aploetz@cqlsh:stackoverflow> SELECT idt_day,tsp_insert,token(idt_day),txt_name FROM mytable ;
idt_day | tsp_insert | system.token(idt_day) | txt_name
----------+---------------------------------+-----------------------+----------
20161028 | 2016-10-28 15:21:09.000000+0000 | 810871225231161248 | Jean
20161028 | 2016-10-28 15:21:01.000000+0000 | 810871225231161248 | Michel
20161028 | 2016-10-28 15:20:44.000000+0000 | 810871225231161248 | Quentin
20161031 | 2016-10-31 09:24:32.000000+0000 | 5928478420752051351 | Jacquie
20161031 | 2016-10-31 09:23:32.000000+0000 | 5928478420752051351 | Gabriel
(5 rows)
卡珊德拉CQL中的结果将总是按照分区键的散列令牌值的顺序返回(可以使用< code>token查看)。在分区键中,您的< code >群集顺序将被强制执行。
这是理解的关键… Cassandra中的结果集排序只能在分区键中强制执行。您无法控制分区键返回的顺序。
简而言之,在您的idt_day
上使用WHERE
子句,您将看到您期望的顺序。
使用Spark连接器通过分区键查询cassandra的理想方法是什么。我使用传入键,但这导致cassandra在引擎盖下添加,从而导致超时。 当前设置: 这里是分区(不是主)键,我有一个复合主键,只使用分区键进行查询 更新:是的,我得到了一个异常:
问题内容: 你好,我需要实现一个接收HashMap并按键对它的值进行排序(mergeSort)的方法 (不使用TreeMap,SortedMap或Collections.Sort或使用JAVA Packages中的任何排序解决方案) 。我的问题是处理通配符类型…这是我的实现(由于使用通配符而返回编译错误) 我感谢您的帮助! 问题答案: 像其他评论者一样,我建议您阅读Java中的泛型主题。您在合并中
问题内容: 某些SQL Server允许使用通用语句,例如。我认为这不适用于MySQL,是否有任何这样的解决方法可以跨多个表进行自动选择,还是需要使用查询查询来确定主键? 我一直在解决的方法是在运行查询之前调用。有更有效的方法吗?在选择过程中,MySQL可以确定表的主键吗? 更新: 正如Gordon所指出的那样,通常在MySQL或SQL中没有官方的方式来执行此操作。SAP具有自定义功能。有一些解决
我在我的活动主题文件: 我正在尝试按Desc对产品进行排序,但产品仍然默认排序(ASC)。 如何按描述对它们进行排序?
我正在尝试使用限制查询来限制查询结果。在没有限制的情况下,查询按预期工作。 但当我尝试使用limit(记录数)来限制记录时,如下所示:, 从上面的查询中,我得到了以下错误, 如何在spring data jpa查询中使用order by limit查询?
node-cassandra-cql 是一个 Apache Cassandra CQL3 二进制协议的 Node.js CQL 驱动。CQL 是 Cassandra 的查询语言。该项目提供到多个主机的连接池、查询参数,以及可通过列名获取数值和支持 bigint。 示例代码: // Creating a new connection pool to multiple hosts.var cql =