2013-06-12 3 views
1

Предположим, что я есть таблица ClientHeaders со следующими столбцамиHector slicequery «где» пункт

| UUID | Cliend_id | IP | Country | Date | 

где UUID является первичным ключом.

Я хочу использовать этот запрос:

select * from ClientHeaders where Client_id = "123"; 

Как я могу сделать это с помощью slicequery Гектора.

Я знаю, что если бы это было так: select * from ClientHeaders where UUID= "123";

После сделал бы задачу:

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

потому что UUID является первичным ключом так sliceQuery.setKey("123"); работает с первичным ключом, Есть ли способ, я могу выполнять функциональные возможности where из не первичного ключа?

ответ

2

Для этого вы должны использовать 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(); 
+0

Эй .. спасибо за ответ .. Но я получаю эту ошибку 'Метод createIndexedSlicesQuery (пространство ключей, Serializer , Serializer , Serializer ) в типе HFactory не применим для аргументов (String, StringSerializer, StringSerializer, BytesArraySerializer) ' –

+0

Я решил вышеупомянутую ошибку, используя« Keyspace keyspace = HFactory.createKeyspace («MyKeyspacename», кластер); «Но теперь« indexedSlicesQuery.execute(); 'is throwing exception:' me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException (почему: нет индекса в столбце индекса с операторным EQ) ' –

+0

да, для этого вам нужно создать индекс для этого имени столбца , например. Обновление столбца семейства ClientHeaders с компаратором = UTF8Type и column_metadata = [{имя_столбца: client_id, validation_class: LongType, index_type: KEYS}]; Примечание: также укажите свои имена требуемых столбцов в запросе обновления и/или выполните соответствующие изменения согласно требованию –