Comando como SQL LIMIT en HBase
¿HBase tiene algún comando que funcione como SQL LIMIT
query?
Puedo hacerlo por setStart
y setEnd
, pero no quiero recorrer todas las filas.
4 answers
Desde el shell de HBase puedes usar LIMIT:
hbase> scan 'test-table', {'LIMIT' => 5}
Desde la API de Java puede usar Scan.setMaxResultSize(N)
o scan.setMaxResultsPerColumnFamily(N)
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-28 17:54:44
Hay un filtro llamado PageFilter. Su significado para este propósito.
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-20 08:18:57
Si se utiliza HBase Shell, se puede usar el siguiente comando para limitar los resultados de la consulta:El "LIMIT" debe estar entre comillas simples.
scan 'table-name', {'LIMIT' => 10}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-19 08:20:06
Una forma garantizada es hacer la limitación en el lado del cliente, dentro del bucle iterador. Este es el enfoque adoptado en el shell Ruby de HBase. De la mesa.rb (H HBASE_HOME/hbase-shell/src/main/ruby/hbase / table.po): Línea 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
Se puede hacer un poco más eficiente añadiendo scan.setFilter (nuevo filtro de página (límite)) y scan.setCaching (limit), y luego table.getScanner (scan). El filtro de página se asegurará de que cada servidor de región devuelva como máximo filas de límite, el límite de almacenamiento en caché de escaneo asegúrese de que cada servidor de región leerá por adelantado y almacenará en caché como máximo las filas de 'límite', y luego la comprobación de límite de bucle del cliente puede romper el bucle después de obtener las primeras filas de' límite ' en el orden recibido por el cliente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-24 21:52:59