Created
April 1, 2012 03:30
-
-
Save nikhilm/2270971 to your computer and use it in GitHub Desktop.
Apache Cassandra: Iterate over all columns of a row in batches of count rows.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Made by Nikhil Marathe <[email protected]> | |
// This code is in the public domain. | |
import java.util.Iterator; | |
import java.util.List; | |
import me.prettyprint.hector.api.beans.ColumnSlice; | |
import me.prettyprint.hector.api.beans.HColumn; | |
import me.prettyprint.hector.api.exceptions.HectorException; | |
import me.prettyprint.hector.api.query.SliceQuery; | |
public class AllColumnsIterator<N, V> implements Iterator<HColumn<N, V>> { | |
private N start; | |
private int count; | |
Iterator<HColumn<N, V>> columnsIterator; | |
SliceQuery<?, N, V> query; | |
private boolean isLastIteration; | |
public AllColumnsIterator(SliceQuery<?, N, V> query) { | |
start = null; | |
count = 100; | |
columnsIterator = null; | |
this.query = query; | |
isLastIteration = false; | |
} | |
public Iterator<HColumn<N, V>> iterator() { | |
return this; | |
} | |
public boolean hasNext() { | |
if (columnsIterator == null || !columnsIterator.hasNext()) { | |
if (isLastIteration) | |
return false; | |
if (!fetchMore()) | |
return false; | |
} | |
return true; | |
} | |
public HColumn<N, V> next() { | |
return columnsIterator.next(); | |
} | |
private boolean fetchMore() { | |
try { | |
query.setRange(start, null, false, count); | |
ColumnSlice<N, V> slice = query.execute().get(); | |
List<HColumn<N, V>> columns = slice.getColumns(); | |
int origSize = columns.size(); | |
if (origSize == 0) { | |
return false; | |
} | |
if (origSize >= count) | |
start = columns.remove(columns.size()-1).getName(); | |
columnsIterator = columns.iterator(); | |
if (origSize < count) | |
isLastIteration = true; | |
return true; | |
} catch (HectorException e) { | |
return false; | |
} | |
} | |
public void remove() { | |
throw new UnsupportedOperationException(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SliceQuery<String, String, String> query = HFactory.createSliceQuery(keyspace, StringSerializer.get(), | |
StringSerializer.get(), StringSerializer.get()); | |
query.setKey("all-monkeys"); | |
query.setColumnFamily("Animals"); | |
AllColumnsIterator<String, String> it = new AllColumnsIterator<String, String>(query); | |
while (it.hasNext()) { | |
HColumn<String, String> column = it.next(); | |
logger.warn(column.getName() + ": " + column.getValue()); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment