Как получить данные из Кассандры, используя IN Query с заданным порядком? - PullRequest
1 голос
/ 05 июля 2019

Я выбираю данные из базы данных 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

Ответы [ 2 ]

3 голосов
/ 05 июля 2019

Если id является ключом раздела, то это невозможно - данные сортируются только внутри столбцов кластеризации, и данные для разных ключей раздела могут быть возвращены в произвольном порядке (но отсортированы внутри этого раздела).

Вам нужно отсортировать данные самостоятельно.

1 голос
/ 05 июля 2019

Поскольку 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 столбцом кластеризации, вам нужно будет указать, что вы хотите, чтобы в вашем порядке по убыванию выглядел оператор

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);

Эта ссылка очень полезна для обсуждения порядка работы в Кассандре: https://www.datastax.com/dev/blog/we-shall-have-order

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...