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

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

19
demandé sur hbase_user 2011-03-07 12:44:53

6 réponses

le shell HBase peut être utilisé pour lister toutes les clés de ligne:

count 'table_name', { INTERVAL => 1 }
20
répondu Haimei 2015-10-19 09:19:43

cela devrait être considérablement plus rapide (le premier Keyonlyfilter est exécuté sur le serveur et supprime toutes les données de la 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();
  ...
}
12
répondu Geli 2015-07-24 23:14:34
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
répondu David 2011-03-08 16:10:33

lors de l'exécution d'un scan de table où seules les touches de ligne sont nécessaires (Pas de familles, de qualificatifs, de valeurs ou d'horodatage), ajouter une FilterList avec un opérateur MUST_PASS_ALL au scanner en utilisant setFilter. La liste de filtres doit inclure à la fois un premier filtre et un filtre clé. L'utilisation de cette combinaison de filtres se traduira dans le pire des cas par la lecture d'une seule valeur du disque par un RegionServer et par un trafic réseau minimal vers le client pour une seule ligne.

2
répondu Patruni Srikanth 2013-02-27 10:30:00

getRow méthode de la classe de résultat. Sa description dit:

méthode pour extraire la clé de la rangée qui correspond à la rangée de dont ce Résultat a été créé.

en Supposant que table est-ce votre table hbase et vous êtes connecté à votre instance HBase, tout ce que vous devez faire c'est:

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 de L'API Java mais un peu plus de détails ne fait pas de mal quiconque.

2
répondu Nikhil Vandanapu 2016-09-19 08:29:30

il semble que vous vouliez utiliser HBase thrift client 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
répondu tobe 2013-12-30 11:16:59