The columns are stored at the intersection of the row and the CF. So if you 
read all the columns for a row in a CF you are only getting those ones. 

Your hector code (using the range) looks correct to me. 

Have fun. 
Aaron

-----------------
Aaron Morton
Freelance Developer
@aaronmorton
http://www.thelastpickle.com

On 23/01/2012, at 9:24 PM, Tamar Fraenkel wrote:

> Hi!
> I am getting started with Cassandra and Hector and have a question.
> If I have CF with many columns, only a small portion of them having values 
> for any given key. I want to read all columns for a given key, but I don't 
> know which columns were populated.
> I managed to do that with the code below (assumes that column names are 
> incremental numbers).
> Is there any better way?
> Thanks,
> Tamar
>  
> private static void readAllColunsForRowKey(String key) { 
>   MultigetSliceQuery<String, Long, String> multigetSlicesQuery = 
>     HFactory.createMultigetSliceQuery(tutorialKeyspace, 
> StringSerializer.get(), LongSerializer.get(),
> 
>        StringSerializer.get()); 
>   multigetSlicesQuery.setColumnFamily(CF); 
>   multigetSlicesQuery.setKeys(key); 
>   multigetSlicesQuery.setRange(null, null, false, COL_COUNT); 
>   QueryResult<Rows<String, Long, String>> results = 
> multigetSlicesQuery.execute(); 
>   Long lastColName; 
>   while ((lastColName = printColsAndGetLastColName(results, key)) != null) { 
>     multigetSlicesQuery.setRange(lastColName + 1, null, false, COL_COUNT); 
>     results = multigetSlicesQuery.execute(); 
>   } 
> } 
> 
> private static Long printColsAndGetLastColName(QueryResult<Rows<String, Long, 
> String>> results, String key) { 
>   Rows<String, Long, String> rows = results.get(); 
>   if (rows.getCount() != 1) { 
>     System.out.println("No such key"); 
>     return null; 
>   } 
>   Row<String, Long, String> row = rows.getByKey(key); 
>   ColumnSlice<Long, String> columnSlice = row.getColumnSlice(); 
>   List<HColumn<Long, String>> columns = columnSlice.getColumns(); 
>   for (HColumn<Long, String> column : columns) { 
>     System.out.println("Column Name: " + column.getName() 
>       + ", Column Val: " + column.getValue()); 
>   } 
>   if (columns.size() == COL_COUNT) { 
>     return columns.get(COL_COUNT - 1).getName(); 
>   } 
>   return null; 
> }
> 

Reply via email to