Получение дополнительных данных, если найденных данных недостаточно. Cassandra - PullRequest
2 голосов
/ 29 января 2020

Моя таблица выглядит так:

CREATE TABLE IF NOT EXISTS names (
 firstname text,
 surname text,
 id text,
 PRIMARY KEY (firstname, surname)
)

Допустим, я хочу вернуть как минимум 10 имен. Я делаю

select * from names where firstname = "something" and surname "something";

Но если это возвращает только 6 человек, я хочу, чтобы это было сделано:

select * from names where firstname = "something" limit 4;

Но я хочу не возвращать один и тот же ряд дважды. И, возможно, сделать это только в одном запросе. Это возможно?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2020

Вы можете положиться на пейджинг, реализованный драйверами, например, в Java.

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

Но будьте очень осторожны с низкие значения страницы - если у вас много данных в разделе, то драйверу потребуется очень часто go для Cassandra, что повлияет на производительность.

PS у вас не может быть 10 записей для запрос where firstname = "something" and surname = "something", поскольку оба столбца содержат полный первичный ключ, и для данного первичного ключа может быть только одна запись. Вы можете использовать что-то вроде where firstname = "something" and surname >= "something" для извлечения данных, начиная с указанной фамилии.

0 голосов
/ 29 января 2020

Вы можете использовать функцию SELECT "DISTINCT" в CQL SH. Вы получите уникальное значение для разделов. Также, пожалуйста, обратитесь к документации ниже для большего понимания: - https://docs.datastax.com/en/dse/5.1/cql/cql/cql_reference/cql_commands/cqlSelect.html

...