Ваш primary key
состоит из partition keys
и clustering columns
.
- Запросы DISTINCT должны запрашивать только ключи разделов.
- ORDER BY поддерживается для кластеризованных столбцов.
Предположим, у нас есть пример таблицы, подобной следующей,
CREATE TABLE Sample (
field1 text,
field2 text,
field3 text,
field4 text,
PRIMARY KEY ((field1, field2), field3));
DISTINCT требует, чтобы все ключи разделения передавались через запятую.
Так что вы не можете запустить этозапрос select distinct field1 from Sample;
.Допустимое выражение: select distinct field1, field2 from Sample;
.
. Оно внутренне обращается ко всем узлам кластера, чтобы найти все ключи разделов, поэтому, если в вашей таблице миллионы разделов, я ожидаю снижения производительности с несколькими узлами..
По умолчанию записи будут в порядке возрастания для field3.Приведенный ниже запрос предоставит записи в порядке убывания поля 3.
select * from Sample where field1 = 'a' and field2 = 'b' order by field3 desc;
Если вы уже знаете шаблоны запросов и то, как вам требуется упорядочивать данные, вы можете создать таблицу таким образом.Предположим, что вы всегда запрашиваете записи в порядке убывания для field3, вы могли бы спроектировать свою таблицу таким образом.
CREATE TABLE Sample (
field1 text,
field2 text,
field3 text,
field4 text,
PRIMARY KEY ((field1, field2), field3))
WITH CLUSTERING ORDER BY (field3 DESC);
Теперь запрос без заказа по приведет к тому же результату.
Вы можетеиспользовать порядок с несколькими кластеризованными столбцами.Но вы не можете пропустить заказ.Чтобы понять, что у нас есть пример таблицы, как показано ниже,
CREATE TABLE Sample1 (
field1 text,
field2 text,
field3 text,
field4 int,
field5 int,
PRIMARY KEY ((field1, field2), field3, field4));
Я добавил несколько фиктивных записей.
Вы можете использовать порядок по нескольким столбцам, как этот select * from Sample1 where field1 = 'a' and field2 = 'b' order by field3 desc, field4 desc;
ПРИМЕЧАНИЕ. Все поля должны быть либо в положительном порядке (field3 asc, field4 asc
), либоотрицательный порядок (field3 desc, field4 desc
).Вы не можете сделать (field3 asc, field4 desc
) или наоборот.
Выше запрос приведет к этому.
Написав, мы не можем пропустить заказ по порядку, я имел в виду, что мы не можем сделать что-то вроде select * from Sample1 where field1 = 'a' and field2 = 'b' order by field4 desc;
Надеюсь, это поможет!