我正在使用查询从Cassandra数据库中选择数据。一切正常,但是如何以与我给定的IN查询相同的顺序获取数据?
我创建了这样的表:
id | n | p | q
----+---+---+------
5 | 1 | 2 | 4
10 | 2 | 4 | 3
11 | 1 | 2 | null
我正在尝试使用
选择数据SELECT *
FROM malleshdmy
WHERE id IN ( 11,10,5)
但是,它产生的数据与存储的数据相同。
id | n | p | q
----+---+---+------
5 | 1 | 2 | 4
10 | 2 | 4 | 3
11 | 1 | 2 | null
请帮助我解决这个问题。
我希望数据分别为11,10和5
答案 0 :(得分:3)
如果id
是分区键,则不可能-数据仅在聚类列内排序,并且不同分区键的数据可以按任意顺序返回(但在该分区内排序)。
您需要自己对数据进行排序。
答案 1 :(得分:1)
由于id是您的分区键,因此实际上是根据id的令牌而不是值本身对数据进行排序:
cqlsh:testid> SELECT id,n,p,q,token(id) FROM table;
id | n | p | q | system.token(id)
----+---+---+------+----------------------
5 | 1 | 2 | 4 | -7509452495886106294
10 | 2 | 4 | 3 | -6715243485458697746
11 | 1 | 2 | null | -4156302194539278891
因此,您无法控制分区键的排序方式。
为了按ID对数据进行排序,您需要使ID成为群集列而不是分区键。但是,您的数据仍将需要一个分区键,并且始终将其按令牌排序。
如果您决定将id设置为一个聚类列,则需要指定您要按语句的降序排列
CREATE TABLE clusterTable (
... partition type, //partition key with a type to be specified
... id INT,
... n INT,
... p INT,
... q INT,
... PRIMARY KEY((partition),id))
... WITH CLUSTERING ORDER BY (id DESC);
此链接对于讨论如何在Cassandra中进行排序非常有用:https://www.datastax.com/dev/blog/we-shall-have-order