我有带时间戳列的宽行。如果我使用DataStax Java驱动程序,我可以使用LIMIT或FETCH_SIZE来分页行结果,但是,我找不到有关如何分页特定行的列的具体信息。
我找到了这篇文章:http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/CQL-3-and-wide-rows-td7594577.html 这解释了我如何根据列名(时间戳)值获取列的范围。
然而,我需要做的是获取所有列,我只是不想将它们全部加载到内存中,而是" stream"结果并一次处理一大块列(最好是可控大小),直到处理完所有行的列。 DataStax驱动程序是否支持此类流媒体?那么 - 使用它的语法是什么?
补充说明: 基本上,我正在寻找的是Hector的ColumnSliceIterator的等价物,我可以使用它来迭代特定行的所有列(最多为Integer.MAX_VALUE编号),例如100列,以下时间:
SliceQuery sliceQuery = HFactory.createSliceQuery(keySpace, ...);
sliceQuery.setColumnFamily(MY_COLUMN_FAMILY);
sliceQuery.setKey(myRowKey);
// columns to be returned. The null value indicates all columns
sliceQuery.setRange(
null // start column
, null // end column
, false // reversed order
, Integer.MAX_VALUE // number of columns to return
);
ColumnSliceIterator iter = new ColumnSliceIterator(
sliceQuery // previously created slice query needs to be passed as parameter
, null // starting column name
, null // ending column name
, false // reverse
, 100 // column count <-- the batch size
);
while (iter.hasNext()) {
String myColumnValue = iter.next().getValue();
}
如何使用DataStax驱动程序执行完全相同的操作?
谢谢!
码头
答案 0 :(得分:4)
您获得的ResultSet对象实际上是默认设置为您进行此类分页。重复调用one()
或使用iterator()
进行迭代将允许您访问所有数据,而无需立即将其全部调用到内存中。 api中提供了更多详细信息。