user1089257
user1089257

Reputation: 21

Cassandra Hector -- In query not working

I am exploring a bit on cassandra cql queries . I have cassandra 1.0 installed and using hector java api . I get an exception like this :-

me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:line 1:99 extraneous input ')' expecting EOF)
    at me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(ExceptionsTranslatorImpl.java:50)
    at me.prettyprint.cassandra.model.CqlQuery$1.execute(CqlQuery.java:127)
    at me.prettyprint.cassandra.model.CqlQuery$1.execute(CqlQuery.java:94)
    at me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.java:101)
    at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:232)
    at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecuteOperation(ExecutingKeyspace.java:97)
    at me.prettyprint.cassandra.model.CqlQuery.execute(CqlQuery.java:93)
    at CassandraBulkUpload.inComplexQuery(CassandraBulkUpload.java:80)
    at CassandraBulkUpload.<init>(CassandraBulkUpload.java:60)
    at BulkDataLoadExample.main(BulkDataLoadExample.java:22)
Caused by: InvalidRequestException(why:line 1:99 extraneous input ')' expecting EOF)
    at org.apache.cassandra.thrift.Cassandra$execute_cql_query_result.read(Cassandra.java:30983)
    at org.apache.cassandra.thrift.Cassandra$Client.recv_execute_cql_query(Cassandra.java:1708)
    at org.apache.cassandra.thrift.Cassandra$Client.execute_cql_query(Cassandra.java:1682)
    at me.prettyprint.cassandra.model.CqlQuery$1.execute(CqlQuery.java:100)

I am trying to run this query:-

CqlQuery<String, String, String> cqlQuery = new CqlQuery<String, String, String>(HFactory.createKeyspace("largedata",cluster),stringSerializer,stringSerializer,stringSerializer);
            String  cql= "SELECT BookTitle FROM book WHERE isbn in((SELECT id FROM book b where year_of_publication='\"1999\"'))";
    cqlQuery.setQuery(cql);
        QueryResult<CqlRows<String, String, String>> result = cqlQuery.execute();

I have also created a secondary index on year_of_publication . Can anyone please tell if cql cassandra queries does not support the above mentioned one ?

Upvotes: 2

Views: 1508

Answers (2)

Pugal
Pugal

Reputation: 31

You're trying to perform a join which is not supported by Cassandra CQL.

Upvotes: 3

libjack
libjack

Reputation: 6443

Depending on what your schema is, assuming the book column family contains all the necessary columns, your query could just be:

SELECT BookTitle FROM book WHERE year_of_publication='1999'

I don't believe Cassandra CQL supports the sub select syntax (yet). According to cql-reference, filtering is limted to:

  • SELECT ... WHERE KEY = keyname AND name1 = value1
  • SELECT ... WHERE KEY >= startkey and KEY =< endkey AND name1 = value1
  • SELECT ... WHERE KEY IN ('', '', '', ...)

Upvotes: 3

Related Questions