如何在给定顺序的查询中从cassandra检索数据?

x3naxklr  于 2021-06-14  发布在  Cassandra
关注(0)|答案(2)|浏览(255)

我使用查询从cassandra数据库中选择数据。它工作得很好,但是如何获得数据的顺序与我在query中给出的相同?
我创建了如下表:

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的数据

hmtdttj4

hmtdttj41#

如果 id 如果是分区键,那么就不可能了—数据只在集群列中排序,不同分区键的数据可以按任意顺序返回(但在该分区中排序)。
您需要自己对数据进行排序。

58wvjzkj

58wvjzkj2#

由于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成为一个集群列,那么您需要在orderby语句中指定降序

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

相关问题