Предел записи HBASE в API сканирования
Есть ли Java-API для ограничения количества отсканированных записей после использования начальных и конечных строк? Это фильтр страницы?
3 ответа
Использовать метод scan.setLimit(int)
https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html
Установите предел строк для этого сканирования. Мы закончим проверку, если число возвращенных строк достигнет этого значения. Это условие будет проверено, наконец, после всех других условий, таких как stopRow, filter и т. Д.
Вы пытались использовать setMaxResultSize ()?
PageFilter может не дать ожидаемых результатов, говорит доктор:
этот фильтр не может гарантировать, что число результатов, возвращаемых клиенту,<= размер страницы. Это связано с тем, что фильтр применяется отдельно на разных серверах региона. Тем не менее, он оптимизирует сканирование отдельных HRegions, следя за тем, чтобы размер страницы никогда не превышался локально.
http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html могут вам помочь. setCaching() используется, чтобы определить, сколько результатов HBase должен вернуть за один вызов RPC.
Этот ответ применим, если вы хотите получить только одну строку
Если вы используете старую версию HBase, где setLimit недоступен, вы можете использовать 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);