Quelqu'un peut-il me dire, comment répertorier toutes les clés de ligne dans une table hbase?
Le shell HBase peut être utilisé pour lister toutes les clés de lignes:
count 'table_name', { INTERVAL => 1 }
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();
...
}
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 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.
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.
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);
?>