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?

有帮助吗?

解决方案

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();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top