Czy HBase ma jakieś polecenie, które działa tak, jak zapytanie o numer: SQL LIMIT
?Polecenie takie jak LIMIT SQL w HBase
Mogę to zrobić przez setStart
i setEnd
, ale nie chcę iterować wszystkich wierszy.
Czy HBase ma jakieś polecenie, które działa tak, jak zapytanie o numer: SQL LIMIT
?Polecenie takie jak LIMIT SQL w HBase
Mogę to zrobić przez setStart
i setEnd
, ale nie chcę iterować wszystkich wierszy.
Z HBase powłoki można wykorzystać limit:
hbase> scan 'test-table', {'LIMIT' => 5}
Od Java API można użyć Scan.setMaxResultSize(N)
lub scan.setMaxResultsPerColumnFamily(N)
.
Aby to zadziałało, musi być separator przecinka między
@ Engineiro, to jest zrobione – javamonkey79
setMaxResultSize nie jest dostępny dla wszystkich wersji Scan, dla starszych wersji musisz użyć PageFilter na przykład @mirsik – javamonkey79
Jest to filtr o nazwie PageFilter. Jest przeznaczony do tego celu.
Scan scan = new Scan(Bytes.toBytes("smith-"));
scan.addColumn(Bytes.toBytes("personal"), Bytes.toBytes("givenName"));
scan.addColumn(Bytes.toBytes("contactinfo"), Bytes.toBytes("email"));
scan.setFilter(new PageFilter(25));
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner) {
// ...
}
http://java.dzone.com/articles/handling-big-data-hbase-part-4
Jeśli ktoś używa HBase Shell, następujące polecenie mogłoby być wykorzystywane do ograniczania wyników zapytania: „Granica” musi być ujęty w apostrofy.
scan 'table-name', {'LIMIT' => 10}
Gwarantowanym sposobem jest wykonanie ograniczenia po stronie klienta, wewnątrz pętli iteratora. Jest to podejście przyjęte w powłoce HBase Ruby. Od table.rb ($ HBASE_HOME/HBase-shell/src/main/Ruby/HBase/table.rb): Linia 467:
# Start the scanner
scanner = @table.getScanner(_hash_to_scan(args))
iter = scanner.iterator
# Iterate results
while iter.hasNext
if limit > 0 && count >= limit
break
end
row = iter.next
...
end
To może być nieco bardziej wydajne dodając scan.setFilter (nowy filtr strony (limit)) i scan.setCaching (limit), a następnie table.getScanner (skanowanie). Filtr stron zapewni, że każdy serwer regionu zwróci co najwyżej limity wierszy, limit buforowania skanowania zapewni, że każdy serwer regionu będzie czytał z wyprzedzeniem i buforował co najwyżej limity wierszy, a następnie sprawdzanie limitu pętli klienta może przerwać pętlę po uzyskiwanie pierwszych wierszy "limit" w kolejności odebranej przez klienta.
Czy chcesz ograniczyć wyniki w oparciu o pewne warunki lub po prostu prosty limit pokazujący najlepsze rekordy? – Tariq