You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by Dinusha Dilrukshi <sd...@gmail.com> on 2013/01/31 07:22:59 UTC

Error when using CQL driver : No indexed columns present in by-columns clause with "equals" operator

Hi All,

I have created a column family as follows. (With secondary indexes.)

create column family users with comparator=UTF8Type and
key_validation_class = 'UTF8Type' and default_validation_class = 'UTF8Type'
 and column_metadata=[{column_name: full_name, validation_class: UTF8Type},
 {column_name: birth_year, validation_class: LongType, index_type: KEYS},
 {column_name: state, validation_class:  UTF8Type, index_type: KEYS}];

And I am using CQL driver-1.1.1 with Cassandra server-1.1.1. Once I try to
execute the following query, it gives  an exception saying 'No indexed
columns present in by-columns clause with "equals" operator'.

CQL :
select * from users where birth_year<1965

Caused by: java.sql.SQLSyntaxErrorException: No indexed columns present in
by-columns clause with "equals" operator
    at
org.apache.cassandra.cql.jdbc.CassandraPreparedStatement.doExecute(CassandraPreparedStatement.java:155)
    at
org.apache.cassandra.cql.jdbc.CassandraPreparedStatement.executeQuery(CassandraPreparedStatement.java:199)

Appreciate any help to resolve this..

Regards,
Dinusha.

Re: Error when using CQL driver : No indexed columns present in by-columns clause with "equals" operator

Posted by Dinusha Dilrukshi <sd...@gmail.com>.
Thanks Sylvain..

Regards,
Dinusha.



On Thu, Jan 31, 2013 at 2:47 PM, Sylvain Lebresne <sy...@datastax.com>wrote:

> birth_year is secondary indexed. When querying using 2nd indexes,
> Cassandra (it's not CQL specific) requires that you use an '=' for at least
> one of the indexed column in the where clause (in your example you only
> have one such column so it should be an '='). This is a limitation of
> 2ndary indexes (that will hopefully be lifted someday -
> https://issues.apache.org/jira/browse/CASSANDRA-4476).
>
> In other words, what you can do is:
>  select * from users where birth_year = 1965
> but your query is not supported (for 2nd indexes that is).
>
> --
> Sylvain
>
>
> On Thu, Jan 31, 2013 at 7:22 AM, Dinusha Dilrukshi <sdddilrukshi@gmail.com
> > wrote:
>
>> Hi All,
>>
>> I have created a column family as follows. (With secondary indexes.)
>>
>> create column family users with comparator=UTF8Type and
>> key_validation_class = 'UTF8Type' and default_validation_class = 'UTF8Type'
>>  and column_metadata=[{column_name: full_name, validation_class:
>> UTF8Type},
>>  {column_name: birth_year, validation_class: LongType, index_type: KEYS},
>>  {column_name: state, validation_class:  UTF8Type, index_type: KEYS}];
>>
>> And I am using CQL driver-1.1.1 with Cassandra server-1.1.1. Once I try
>> to execute the following query, it gives  an exception saying 'No indexed
>> columns present in by-columns clause with "equals" operator'.
>>
>> CQL :
>> select * from users where birth_year<1965
>>
>> Caused by: java.sql.SQLSyntaxErrorException: No indexed columns present
>> in by-columns clause with "equals" operator
>>     at
>> org.apache.cassandra.cql.jdbc.CassandraPreparedStatement.doExecute(CassandraPreparedStatement.java:155)
>>     at
>> org.apache.cassandra.cql.jdbc.CassandraPreparedStatement.executeQuery(CassandraPreparedStatement.java:199)
>>
>> Appreciate any help to resolve this..
>>
>> Regards,
>> Dinusha.
>>
>
>

Re: Error when using CQL driver : No indexed columns present in by-columns clause with "equals" operator

Posted by Sylvain Lebresne <sy...@datastax.com>.
birth_year is secondary indexed. When querying using 2nd indexes, Cassandra
(it's not CQL specific) requires that you use an '=' for at least one of
the indexed column in the where clause (in your example you only have one
such column so it should be an '='). This is a limitation of 2ndary indexes
(that will hopefully be lifted someday -
https://issues.apache.org/jira/browse/CASSANDRA-4476).

In other words, what you can do is:
 select * from users where birth_year = 1965
but your query is not supported (for 2nd indexes that is).

--
Sylvain


On Thu, Jan 31, 2013 at 7:22 AM, Dinusha Dilrukshi
<sd...@gmail.com>wrote:

> Hi All,
>
> I have created a column family as follows. (With secondary indexes.)
>
> create column family users with comparator=UTF8Type and
> key_validation_class = 'UTF8Type' and default_validation_class = 'UTF8Type'
>  and column_metadata=[{column_name: full_name, validation_class: UTF8Type},
>  {column_name: birth_year, validation_class: LongType, index_type: KEYS},
>  {column_name: state, validation_class:  UTF8Type, index_type: KEYS}];
>
> And I am using CQL driver-1.1.1 with Cassandra server-1.1.1. Once I try to
> execute the following query, it gives  an exception saying 'No indexed
> columns present in by-columns clause with "equals" operator'.
>
> CQL :
> select * from users where birth_year<1965
>
> Caused by: java.sql.SQLSyntaxErrorException: No indexed columns present in
> by-columns clause with "equals" operator
>     at
> org.apache.cassandra.cql.jdbc.CassandraPreparedStatement.doExecute(CassandraPreparedStatement.java:155)
>     at
> org.apache.cassandra.cql.jdbc.CassandraPreparedStatement.executeQuery(CassandraPreparedStatement.java:199)
>
> Appreciate any help to resolve this..
>
> Regards,
> Dinusha.
>