我在Cassandra中创建一个表来监视来自应用程序的插入。 我的分区键是一个由年+月+日组成的int,我的聚类键是一个时间戳,之后是我的用户名和其他一些字段。
我想显示最后5个插入,但似乎分区键位于“desc命令”之前。
如何获得正确的结果? Normaly聚类键导致顺序,所以为什么我得到这个结果? (提前感谢)
信息:
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
通缉:
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);
答案 0 :(得分:4)
最终,您正在查看当前订单,因为您没有使用SKShapeNode
子句。如果在分区键上使用WHERE
函数,则可以看到正在发生的事情:
token
Cassandra CQL中的结果将始终按分区键的哈希标记值的顺序返回(您可以使用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)
查看)。在分区键中,您的token
将被强制执行。
这是理解的关键...... Cassandra中的结果集排序只能在分区键中强制执行。您无法控制分区键重新进入的顺序。
简而言之,在CLUSTERING ORDER
上使用WHERE
条款,您就会看到预期的顺序。
答案 1 :(得分:0)
在我看来,你弄错了。分区键不用于排序数据,它们仅用于了解数据在集群中的位置,特别是节点。而且,订单在分区内真正重要......
您的查询结果确实无法预测。根据哪个节点更快回答(假设群集而不是单个节点),每次都可以获得不同的结果。您应该尽量避免在没有分区限制的情况下进行选择,否则它们不会缩放。
然而,您可以更改查询并每天执行一次选择,然后以有序的方式查询订购数据(您的群集密钥)(您手动选择查询中的天数顺序)。作为旁注,它会更快,因为您可以并行查询多个分区。