Как с помощью CQL3 перечислить все ключи разделов таблицы в Cassandra? В частности, возникают сложности с возвратом отдельных ключей и разбиением результатов на страницы.
Использование CQL для обхода ключей разделов таблицы Cassandra
Ответы (3)
Я думаю, что с небольшим предварительным знанием возможных значений ваших ключей это можно сделать с помощью функции токена. Взгляните на этот ответ. Это то, что вы ищете?
Кроме того, родная нумерация страниц, по-видимому, является предстоящей функцией версии 2.0. Это в последней бета-версии.
Пока не выйдет версия 2.0, вы можете видеть это обходной путь для разбиения на страницы в блоге datastax (перейдите в раздел "Разбиение на страницы CQL3"). В принципе, это почти то же самое, что и ссылка, которую я разместил выше, но очень подробно рассказывается, как реализовать разбиение на страницы с учетом ключей столбцов и т. Д.
TOKEN
здесь на странице документов DataStax .
- person Bazi; 12.02.2015
Вы можете сделать это, как в следующем примере. Создайте тестовую таблицу:
> create table partition_keys_test (p_key text PRIMARY KEY, rest text);
и вставьте несколько строк, например:
> insert into partition_keys_test (p_key, rest) VALUES ('1', 'blah');
Я сделал это для p_key '1', '2',..., '9'.
Затем пролистайте ключи разделов. Начните с:
> select p_key from partition_keys_test limit 2;
p_key
-------
6
7
для размера страницы 2. Затем возьмите последний результат p_key и используйте его в следующем запросе:
> select p_key from partition_keys_test where token(p_key) > token('7') limit 2;
p_key
-------
9
4
и так далее, пока не получите результат меньше размера страницы.
Обратите внимание, что вы должны ожидать, что это прочитает весь ваш набор данных. Для очень широких строк это может быть не так, но все равно будет очень много операций ввода-вывода.
Кроме того, если строки создаются или удаляются и имеют маркеры выше, чем у вас есть до сих пор, они будут отображаться в последующих запросах. Таким образом, если вы выполняете вышеуказанные запросы на подкачку во время создания или удаления строк, ключи секции могут быть возвращены или не возвращены в зависимости от времени.
select p_key from partition_keys_test where token(p_key) > token('') limit 2;
. Если у вас есть составной первичный ключ, вы получите дубликаты. Я не думаю, что есть какой-либо способ отфильтровать дубликаты на стороне сервера.
- person Richard; 14.08.2013
Плохая новость заключается в том, что на данный момент (август 2013 г.) вам нужно выбрать весь первичный ключ, а не только ключ раздела, чтобы просмотреть их. С составным PK это может включать в себя множество повторяющихся ключей раздела.
Хорошая новость заключается в том, что https://issues.apache.org/jira/browse/CASSANDRA-4536 открыт, чтобы разрешить SELECT DISTINCT
для особого случая ключей раздела в 2.0.1, поскольку можно эффективно получить уникальные ключи раздела изнутри; CQL просто не имеет хорошего способа выразить это до тех пор.