cql3 запрос с более чем 1 ограничением EQ и ORDER BY

с помощью CF:

CREATE TABLE history (
  domain text,
  iid text,
  timeid timeuuid,
  data text,
  comments text,
  PRIMARY KEY (domain, iid, timeid)
);

Я хотел бы запросить это следующим образом:

select domain, iid, timeid, data, comments from mappings
where domain = 'a' and iid = 'b'  order by timeid desc;

Но это не удается со следующей ошибкой (cassandra 1.1.5):

Bad Request: Order by currently only support the ordering of columns following their declared order in the PRIMARY KEY

Я делаю это неправильно? Что может быть обходным путем? Спасибо

PS У меня это работает с одним ограничением эквалайзера и ORDER BY, но мне нужно как минимум 2 ограничения и порядок.


person Ivan Velykorodnyy    schedule 08.11.2012    source источник
comment
Является ли «iid» индексированным столбцом?   -  person lstern    schedule 08.11.2012
comment
Я не хочу вас обескураживать, но согласно: datastax.com/dev/blog/whats-new-in-cql-3-0 Предложения ORDER BY могут выбирать только один столбец, и этот столбец должен быть вторым столбцом в составном PRIMARY KEY. Это справедливо даже для таблиц с более чем двумя компонентами столбцов в первичном ключе. Надеюсь, это скоро изменится. Возможна ли смена CF?   -  person Oren    schedule 08.11.2012
comment
@Istern, пока iid является частью первичного ключа, я ожидаю, что он проиндексирован   -  person Ivan Velykorodnyy    schedule 09.11.2012
comment
@ Орен, это смешно, когда я это читал, но, черт возьми, в деталях .. спасибо, что снова указал мне на это! Да могу поменять CF что посоветуете?   -  person Ivan Velykorodnyy    schedule 09.11.2012


Ответы (1)


Вы можете изменить столбец "order by" на второй столбец в первичном ключе:

select * from history where domain = 'a' and iid = 'b' order by iid desc;

Это немного сбивает с толку, потому что вы ограничиваете iid равенством, но это работает - вы получите результат, отсортированный по timeid.

Я полагаю, это потому, что iid и timeid образуют один составной столбец, и когда вы упорядочиваете по iid в порядке убывания, он упорядочивает все компоненты составного столбца, включая timeid.

person Dmitry Shohov    schedule 22.10.2013
comment
+1 к этому ответу за правильность, -1 Кассандре за то, что она не поддерживает эту простую функцию простым способом. - person Gordon Gustafson; 06.08.2015
comment
Я считаю, что это должно быть заказано по iid, desc. запятая отсутствует. - person treehouse; 11.03.2016
comment
см. примеры здесь — ссылка — запятая не требуется - person Dmitry Shohov; 05.04.2016