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.

 43
Author: 030, 2012-12-22

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).

 71
Author: th30z,
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

 13
Author: mirsik,
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}
 6
Author: Animesh Raj Jha,
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.

 1
Author: devarajaswami,
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