web-dev-qa-db-fra.com

comment lister toutes les clés de lignes dans une table hbase?

Quelqu'un peut-il me dire, comment répertorier toutes les clés de ligne dans une table hbase?

21
hbase_user

Le shell HBase peut être utilisé pour lister toutes les clés de lignes:

count 'table_name', { INTERVAL => 1 }
21
Haimei

Cela devrait être considérablement plus rapide (FirstKeyOnlyFilter est exécuté sur le serveur et supprime toutes les données de colonne avant d'envoyer le résultat au client):

Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, tableName.getBytes());
System.out.println("scanning full table:");
Scan scan = new Scan();
scan.setFilter(new FirstKeyOnlyFilter());
ResultScanner scanner = table.getScanner(scan);
for (Result rr : scanner) {
  byte[] key == rr.getRow();
  ...
}
13
Geli
Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, tableName.getBytes());

System.out.println("scanning full table:");
ResultScanner scanner = table.getScanner(new Scan());
for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
  byte[] key == rr.getRow();
  ...
}
5
David

Lors d'une analyse de table où seules les clés de ligne sont nécessaires (pas de familles, qualificateurs, valeurs ou horodatages), ajoutez une liste de filtres avec un opérateur MUST_PASS_ALL au scanner à l'aide de setFilter. La liste de filtres doit inclure à la fois un filtre FirstKeyOnlyFilter et un filtre KeyOnlyFilter. L'utilisation de cette combinaison de filtres aboutira dans le pire des cas à un serveur RegionServer lisant une seule valeur à partir du disque et à un trafic réseau minimal vers le client pour une seule ligne.

2
Patruni Srikanth

Utilisez la méthode getRow de la classe Result. Sa description dit:

Méthode de récupération de la clé de ligne qui correspond à la ligne de Pour laquelle ce résultat a été créé.

En supposant que table est votre table hbase et que vous êtes connecté à votre instance HBase, il vous suffit de:

Scan scan = new Scan();
ResultScanner rscanner = table.getScanner(scan);
for(Result r : rscanner){
   //r is the result object that contains the row
   //do something
   System.out.println(Bytes.toString(r.getRow())); //doing something
}

Je comprends que cela a déjà été répondu du point de vue des API Java, mais un peu plus de détails ne font de mal à personne.

2
Nikhil Vandanapu

Il semble que vous souhaitiez utiliser le client d’épargne HBase en PHP. Voici un exemple de code et vous pouvez obtenir toutes les données dans HBase et obtenir leurs clés de ligne.

<? $_SERVER['PHP_ROOT'] = realpath(dirname(__FILE__).'/..');
   require_once $_SERVER['PHP_ROOT'].'/flib/__flib.php';
   flib_init(FLIB_CONTEXT_SCRIPT);
   require_module('storage/hbase');
   $hbase = new HBase('<server_name_running_thrift_server>', <port on which thrift server is running>);
   $hbase->open();
   $client = $hbase->getClient();
   $result = $client->scannerOpenWithFilterString('table_name', "(PrefixFilter ('row2') AND (QualifierFilter (>=, 'binary:xyz'))) AND (TimestampsFilter ( 123, 456))");
   $to_print = $client->scannerGetList($result,1);
   while ($to_print) {
      print_r($to_print);
      $to_print = $client->scannerGetList($result,1);
    }
   $client->scannerClose($result);
?>
1
tobe