2013-05-28 4 views
0

Я работаю с Cassandra, и я использую клиент Hector для чтения и обновления данных в базе данных Cassandra. Я пытаюсь получить данные из базы данных Cassandra с помощью hector client, и я могу это сделать, если попытаюсь извлечь только один столбец.Извлечение нескольких столбцов из Cassandra с помощью клиента Hector

Теперь я пытаюсь получить данные для rowKey as 1011, но с именами столбцов в виде коллекции строки. Ниже мой API, который будет извлекать данные из базы данных Cassandra с помощью Гектору на пациент

public Map<String, String> getAttributes(String rowKey, Collection<String> attributeNames, String columnFamily) { 

    final Cluster cluster = CassandraHectorConnection.getInstance().getCluster();  
    final Keyspace keyspace = CassandraHectorConnection.getInstance().getKeyspace(); 

    try { 

     ColumnQuery<String, String, String> columnQuery = HFactory 
       .createStringColumnQuery(keyspace) 
       .setColumnFamily(columnFamily).setKey(rowKey) 
       .setName("c1"); 

     QueryResult<HColumn<String, String>> result = columnQuery.execute(); 
     System.out.println("Column Name from cassandra: " + result.get().getName() + "Column value from cassandra: " + result.get().getValue()); 

    } catch (HectorException e) { 
     LOG.error("Exception in CassandraHectorClient::getAttributes " +e+ ", RowKey = " +rowKey+ ", Attribute Names = " +attributeNames); 
    } finally { 
     cluster.getConnectionManager().shutdown(); 
    } 


    return null; 

} 

Если вы видите мой вышеупомянутый метод, я пытаюсь получить данные из базы данных Cassandra для конкретного rowKey и column c1. Теперь я пытаюсь получить данные из базы данных Cassandra для сбора столбцов для определенного rowKey.

Значение что-то вроде this-

Я хочу, чтобы получить данные для нескольких столбцов, но и для того же RowKey. Как это сделать с помощью клиента Hector? И я не хочу извлекать данные для всех столбцов, а затем итерации, чтобы узнать данные отдельных столбцов, которые я ищу.

ответ

2

Используйте имя столбца доливает составной ключ в комбинации UTF8Type и TIMEUUID затем после

sliceQuery.setKey("your row key"); 

Composite startRange = new Composite(); 
startRange.addComponent(0, "c1",Composite.ComponentEquality.EQUAL); 

Composite endRange = new Composite(); 
endRange.addComponent(0, "c1",Composite.ComponentEquality.GREATER_THAN_EQUAL); 

sliceQuery.setRange(startRange,endRange, false, Integer.MAX_VALUE); 

QueryResult<ColumnSlice<Composite, String>> result = sliceQuery.execute(); 
ColumnSlice<Composite, String> cs = result.get(); 

выше кода даст вам все записи для вас грести ключ после этого итераций следующего

for (HColumn<Composite, String> col : cs.getColumns()) { 
System.out.println("column key's first part : "+col.getName().get(0, HFactoryHelper.stringSerializer).toString()); 
System.out.println("column key's second part : "+col.getName().get(1, HFactoryHelper.uuidSerializer).toString()); 
System.out.println("column key's value : "+col.getValue()); 
} 

некоторые, где вам нужно написать логику для ведения набора записей

Смежные вопросы