Может кто-нибудь сказать мне, как перечислить все ключи строк в таблице hbase?
Как перечислить все ключи строк в таблице hbase?
Ответ 1
Оболочка HBase может использоваться для перечисления всех клавиш строки:
count 'table_name', { INTERVAL => 1 }
Ответ 2
Это должно быть значительно быстрее (FirstKeyOnlyFilter запускается на сервере и разбивает все данные столбцов перед отправкой результата клиенту):
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();
...
}
Ответ 3
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();
...
}
Ответ 4
При выполнении сканирования таблицы, где требуются только ключи строки (нет семейств, квалификаторов, значений или временных меток), добавьте FilterList с оператором MUST_PASS_ALL к сканеру с помощью setFilter. Список фильтров должен включать как FirstKeyOnlyFilter, так и KeyOnlyFilter. Использование этой комбинации фильтров приведет к худшему сценарию RegionServer, который считывает одно значение с диска и минимальный сетевой трафик для клиента для одной строки.
Ответ 5
Кажется, что вы хотите использовать клиентский клиент HBase на PHP. Вот пример кода, и вы можете получить все данные в HBase и получить их строки.
<? $_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);
?>
Ответ 6
Используйте метод getRow класса результатов. В его описании говорится:
Метод для получения ключа строки, который соответствует строке из который был создан для этого результата.
Предполагая, что table
- ваша таблица hbase, и вы подключены к вашему экземпляру HBase, вам нужно всего лишь:
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
}
Я понимаю, что это уже ответили с точки зрения API Java, но немного больше деталей никому не повредит.