Commande comme SQL LIMIT dans HBase

HBase a-t-il une commande qui fonctionne comme SQL LIMIT query?

Je peux le faire par setStart et setEnd, mais je ne veux pas itérer toutes les lignes.

43
demandé sur 030 2012-12-22 16:45:19

4 réponses

À partir du shell HBase, vous pouvez utiliser LIMIT:

hbase> scan 'test-table', {'LIMIT' => 5}

À Partir de l'API Java, vous pouvez utiliser Scan.setMaxResultSize(N) ou scan.setMaxResultsPerColumnFamily(N).

71
répondu th30z 2015-09-28 17:54:44

Il existe un filtre appelé PageFilter. Sa destinée à cet effet.

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
répondu mirsik 2014-02-20 08:18:57

Si L'on utilise HBase Shell, la commande suivante peut être utilisée pour limiter les résultats de la requête: la "limite" doit être entre guillemets simples.

scan 'table-name', {'LIMIT' => 10}
6
répondu Animesh Raj Jha 2015-03-19 08:20:06

Un moyen garanti est de faire la limitation du côté client, à l'intérieur de la boucle d'itérateur. C'est l'approche adoptée dans le Shell HBase Ruby. À partir de la table.rb ($HBASE_HOME / hbase-shell / src / main/ruby/hbase / table.RB): Ligne 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

Il peut être rendu un peu plus efficace en ajoutant scan.setFilter (Nouveau PageFilter (limite)) et scan.setCaching (limite), puis table.getScanner(balayage). Le filtre de page s'assurera que chaque serveur de région retournera au plus des lignes de limite, la limite de mise en cache d'analyse assurez-vous que chaque serveur de région Lira à l'avance et mettra en cache au plus les lignes' limit', puis la vérification de la limite de boucle du client peut casser la boucle après avoir obtenu les premières lignes' limit ' dans l'ordre reçu par le client.

1
répondu devarajaswami 2015-01-24 21:52:59