Thanks Hannu. I got your point.. But in my example `employee_id` won't be larger than `32767`.. So I am thinking of creating an index on these two columns -
create index employee_name_idx on test (employee_name); create index last_modified_date_idx on test (last_modified_date); As the chances of executing the queries on above is very minimal.. Very rarely, we will be executing the above query but if we do, I wanted system to be capable of doing it. Now I can execute the below queries after creating an index - select * from test where employee_name = 'e27'; select employee_id from test where employee_name = 'e27'; select * from test where employee_id = '1'; But I cannot execute the below query which is - "Give me everything that has changed within 15 minutes" . So I wrote the below query like this - select * from test where last_modified_date > mintimeuuid('2013-11-03 13:33:30') and last_modified_date < maxtimeuuid('2013-11-03 13:33:45'); But it doesn't run and I always get error as - Bad Request: No indexed columns present in by-columns clause with Equal operator Any thoughts what wrong I am doing here? On Sun, Nov 3, 2013 at 12:43 PM, Hannu Kröger <hkro...@gmail.com> wrote: > Hi, > > You cannot query using a field that is not indexed in CQL. You have to > create either secondary index or create index tables and manage those > indexes by yourself and query using those. Since those keys are of high > cardinality, usually the recommendation for this kind of use cases is that > you create several tables with all the data. > > 1) A table with employee_id as the primary key. > 2) A table with last_modified_at as the primary key (use case 2) > 3) A table with employee_name as the primary key (your test query with > employee_name 'e27' and use cases 1 & 3.) > > Then you populate all those tables with your data and then you use those > tables depending on the query. > > Cheers, > Hannu > > > > 2013/11/3 Techy Teck <comptechge...@gmail.com> > >> I have below table in CQL- >> >> create table test ( >> employee_id text, >> employee_name text, >> value text, >> last_modified_date timeuuid, >> primary key (employee_id) >> ); >> >> >> I inserted couple of records in the above table like this which I will be >> inserting in our actual use case scenario as well- >> >> insert into test (employee_id, employee_name, value, >> last_modified_date) values ('1', 'e27', 'some_value', now()); >> insert into test (employee_id, employee_name, value, >> last_modified_date) values ('2', 'e27', 'some_new_value', now()); >> insert into test (employee_id, employee_name, value, >> last_modified_date) values ('3', 'e27', 'some_again_value', now()); >> insert into test (employee_id, employee_name, value, >> last_modified_date) values ('4', 'e28', 'some_values', now()); >> insert into test (employee_id, employee_name, value, >> last_modified_date) values ('5', 'e28', 'some_new_values', now()); >> >> >> >> Now I was doing select query for - give me all the employee_id for >> employee_name `e27`. >> >> select employee_id from test where employee_name = 'e27'; >> >> And this is the error I am getting - >> >> Bad Request: No indexed columns present in by-columns clause with >> Equal operator >> Perhaps you meant to use CQL 2? Try using the -2 option when starting >> cqlsh. >> >> >> Is there anything wrong I am doing here? >> >> My use cases are in general - >> >> 1. Give me everything for any of the employee_name? >> 2. Give me everything for what has changed in last 5 minutes? >> 3. Give me the latest employee_id for any of the employee_name? >> >> I am running Cassandra 1.2.11 >> >> >