2012-11-08 19 views
8

używając CF:zapytania cql3 restrykcyjnymi więcej niż 1 EQ i ORDER BY

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

Chciałbym zapytać tak:

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

Ale to nie powiedzie się z powodu następującego błędu (Cassandra 1.1.5):

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

Czy robię to źle? Jakie może być obejście tego problemu? Thx

PS Mam to działa z jednym ograniczeniem EQ i ORDER BY, ale potrzebuję co najmniej 2 ograniczenia i porządku przez.

+0

Czy "iid" jest kolumną indeksowaną? – lstern

+4

Nie chcę cię zniechęcać, ale zgodnie z: http://www.datastax.com/dev/blog/whats-new-in-cql-3-0 "Klauzule ORDER BY można wybrać tylko jeden kolumna i kolumna musi być drugą kolumną w złożonym kluczu podstawowym. Dotyczy to również tabel z więcej niż 2 kolumnami komponentów w kluczu podstawowym. "Mam nadzieję, że to się wkrótce zmieni. Czy zmieniasz opcję CF? – Oren

+0

@Istern tak długo, jak iid jest częścią klucza podstawowego, oczekuję, że jest indeksowany –

Odpowiedz

9

można zmienić „zamówienie” kolumny do drugiej kolumny klucza podstawowego:

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

Jest to nieco mylące, ponieważ ograniczają iid z równością, ale działa - dostaniesz Twój wynik klasyfikowane przez timeid.

wierzę, to dlatego iid i timeid tworzą jeden kompozyt kolumna i podczas zamawiania przez iid w kolejności malejącej, to zamawia wszystkie złożone elementy kolumn tym timeid.

+1

+1 dla tej odpowiedzi za poprawność, -1 dla Cassandry za nieobsługiwanie tej prostej funkcji w prosty sposób. –

+0

Uważam, że powinno to być "order byid, desc". brakuje przecinka. –

+0

zobacz przykłady tutaj - [link] (https://docs.datastax.com/en/cql/3.1/cql/cql_using/useColumnsSort.html) - nie jest potrzebny przecinek –

Powiązane problemy