Search code examples
javajakarta-eecassandrahectorcassandra-cli

Hector slicequery 'where' clause


Suppose I have a table ClientHeaders with following columns

| UUID | Cliend_id | IP | Country | Date |

where UUID is primary key.

I want to use this query:

select * from ClientHeaders where Client_id = "123";

How can I do it using slicequery of hector.

I know if it was like this : select * from ClientHeaders where UUID= "123";

Following would have done the task:

sliceQuery.setColumnFamily("ClientHeaders");
sliceQuery.setKey("123");
sliceQuery.setRange("", "", false, 5);
QueryResult<ColumnSlice<String, String>> result = sliceQuery.execute(); 

because UUID is primary key so sliceQuery.setKey("123"); works with primary key, Is there any way I can do the where clause functionality from a non primary key?


Solution

  • For that you have to use IndexedSlicesQuery

    StringSerializer stringSerializer = StringSerializer.get();
    BytesArraySerializer bas = BytesArraySerializer.get();
    
    
    IndexedSlicesQuery<String, String, byte[]> indexedSlicesQuery = 
                HFactory.createIndexedSlicesQuery("your keyspace", stringSerializer, stringSerializer, bas);
    
    indexedSlicesQuery.setColumnFamily("ClientHeaders");
    indexedSlicesQuery.setColumnNames("UUID","Cliend_id","IP","Country","Date");
    indexedSlicesQuery.addEqualsExpression("Client_id", stringSerializer.toBytes("123"));
    
    QueryResult<OrderedRows<String, String, byte[]>> result = indexedSlicesQuery.execute();