2012-04-11 35 views
7

我是cassandra和hector中的新成员。使用Hector客户端检索Cassandra中所有行的列

我想使用hector检索Cassandra中所有行的所有列。 对网络经过一番摸索我得到了一些示例代码,但它需要的范围或列名一样,

SliceQuery<String,String,String> query = HFactory.createSliceQuery(keyspace, ss, ss, ss); 
    query.setColumnFamily("MyColumnFamily").setKey("S001").setRange(null, null, false, 100); 
    QueryResult<ColumnSlice<String,String>> result = query.execute(); 
    for (HColumn<String, String> column : result.get().getColumns()) { 
     System.out.println(column.getName() +"::"+ column.getValue()); 
    } 

在这里,我需要设置范围在setRange()方法,获取可在此范围内的列。我们也可以在这个方法中设置开始和结束,但是这也会给出特定范围的列。如果我不设置范围,那么我需要给列名作为数组。

有什么办法可以获得特定行的所有列? 我不想设置范围或列名称,我只想要一行的所有列。因为在我的应用程序列中没有预定义。

或者有什么办法可以得到一个行的总列数,所以我可以在setRange()方法中设置它?

谢谢。

回答

10

对于有点小的行来说,这样做的方法是使用setRange()方法,确切地说,它是如何在您粘贴的示例中使用的。如果将范围的开始和结束参数设置为空,则从中提取的范围是整行。

你需要考虑的唯一事情就是限制。在您粘贴的示例中,限制设置为100,因此查询不会返回超过100列。如果要始终检索连续的所有列,则可以将限制设置为非常大的数字(大于可能的列数),但这通常是一个好主意,但这不是而是

相反,您可能希望为范围查询创建一个hector ColumnSliceIterator,它将为该行提供一个迭代器接口,并允许您遍历整行而不一次查询太多列。参见本页底部“列迭代”下的示例:

https://github.com/rantav/hector/wiki/Getting-started-%285-minutes%29

相关问题