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?
6 réponses
le shell HBase peut être utilisé pour lister toutes les clés de ligne:
count 'table_name', { INTERVAL => 1 }
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();
...
}
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();
...
}
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.
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.
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);
?>