这次记录的主要是取出多行, slices 值得是列切片,
取出多行用的是client.get_range_slices 具体代码如下
Connector conn = new Connector();
Cassandra.Client client = conn.connect("Keyspace1");
SlicePredicate predicate = new SlicePredicate();
List<ByteBuffer> colNames = new ArrayList<ByteBuffer>();
colNames.add(UsefulUtils.toByteBuffer("a"));
colNames.add(UsefulUtils.toByteBuffer("b"));
predicate.column_names = colNames;
//我们只区ab 两列值,可以看出来,前面基本差不多
ColumnParent parent = new ColumnParent("Standard1");
KeyRange keyRange = new KeyRange();//定义一个行键值区间,这里是主要区别
keyRange.start_key = UsefulUtils.toByteBuffer("k1");
keyRange.end_key = UsefulUtils.toByteBuffer("k2");
//跟列一样,键值也是有顺序存储在硬盘/内存 中的,所以说,要指定一个开始键值,结束键值,你就会得到一串连续的键值
// get a group keyslice
List<KeySlice> results = client.get_range_slices(parent, predicate,
keyRange, CL);
//然后调用get_range_slices, 可以得到包含很多结果keyslice 的LIST
得到这个list之后,就可以遍历这个list 按照不同的键值,取出对应的columns, 以前我们取出的都是一行,只有一个key
这次我们取了好几行,每行只有a, b 两列/ 当然,你也可以结合取出一个slice的列
for (KeySlice keySlice : results) {
List<ColumnOrSuperColumn> cosc = keySlice.getColumns();
System.out.println("Current row:" + new String(keySlice.getKey()));
for(ColumnOrSuperColumn cc: cosc){
Column c=cc.getColumn();
UsefulUtils.formatKeyValueOutPut(c.name, c.value);
}
上面是遍历语法
这篇文章记录了 用Keyrange 指定一组rowkey来得到多行数据