Hat HBase einen Befehl, der wie SQL LIMIT
Abfrage funktioniert?Befehl wie SQL LIMIT in HBase
Ich kann es durch setStart
und setEnd
tun, aber ich möchte nicht alle Zeilen durchlaufen.
Hat HBase einen Befehl, der wie SQL LIMIT
Abfrage funktioniert?Befehl wie SQL LIMIT in HBase
Ich kann es durch setStart
und setEnd
tun, aber ich möchte nicht alle Zeilen durchlaufen.
Von der HBase Shell Sie LIMIT verwenden können:
hbase> scan 'test-table', {'LIMIT' => 5}
Von der Java-API Sie Scan.setMaxResultSize(N)
oder scan.setMaxResultsPerColumnFamily(N)
verwenden können.
Damit das funktioniert, muss zwischen
@ Engineiro, das ist getan – javamonkey79
setMaxResultSize ist nicht für alle Versionen von Scan verfügbar, für ältere Versionen müssen Sie PageFilter per @mirsik Beispiel verwenden – javamonkey79
Es ist ein Filter namens PageFilter. Es ist für diesen Zweck gedacht. Die „LIMIT“ muss in einfache Anführungszeichen eingeschlossen werden:
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
Nutzt man HBase Shell könnte der folgende Befehl die Abfrageergebnisse zu begrenzen.
scan 'table-name', {'LIMIT' => 10}
Ein garantierter Weg ist die Begrenzung auf der Client-Seite, innerhalb der Iterator-Schleife. Dies ist der Ansatz in der HBase Ruby Shell. Von table.rb ($ HBASE_HOME/hbase-Shell/src/main/ruby / hbase/table.rb): Linie 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
Es kann etwas effizienter durch Zugabe von scan.setFilter gemacht werden (new PageFilter (limit)) und scan.setCaching (limit) und dann table.getScanner (scan). Der Seitenfilter stellt sicher, dass jeder Regionsserver bei den meisten Grenzwertzeilen zurückkehrt, das Scan-Caching-Limit stellt sicher, dass jeder Regionsserver die meisten "Limit" -Reihen vorauslesen und zwischenspeichern wird die ersten 'limit'-Zeilen in der Reihenfolge erhalten, die der Client erhalten hat.
Möchten Sie die Ergebnisse basierend auf einer bestimmten Bedingung oder nur einem einfachen Limit begrenzen, das top 'n' Datensätze anzeigt? – Tariq