使用开始和停止行后是否有任何java api来限制扫描记录的数量?页面过滤器是一个选项吗?
4 回答
您是否尝试使用setMaxResultSize()?
文档说,PageFilter 可能不会给出预期的结果:
此过滤器不能保证返回给客户端的结果数量 <= 页面大小。这是因为过滤器在不同的区域服务器上单独应用。但是,它确实通过确保本地永远不会超出页面大小来优化单个 HRegions 的扫描。
使用 scan.setLimit(int) 方法
https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html#setLimit-int-
设置此扫描的行数限制。如果返回的行数达到此值,我们将终止扫描。在所有其他条件(如 stopRow、过滤器等)之后,最后将测试此条件。
http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html#setCaching(int)可能会帮助你。setCaching() 用于定义 HBase 在一次 RPC 调用中应该返回多少结果。
如果您只想获得单行,则此答案适用
如果您使用的是setLimit不可用的旧版 HBase,则可以使用stopRow代替给它与startRow相同的值,并添加一个尾随字节设置为零以使其具有包容性,来自文档:
注意:为了使 stopRow 包含在内,添加一个尾随 0 字节
这是一个例子:
byte[] startRow = new byte[] { (byte)0xab, (byte)0xac};
byte[] stopRow = new byte[startRow.length + 1];
Array.copy(startRow, 0, stopRow, 0, startRow.length);
stopRow[stopRow.length - 1] = 0; // inclusive
Scan scan = new Scan().setStartRow(startRow).setStopRow(stopRow);