Подтвердить что ты не робот

Как перечислить все ключи строк в таблице hbase?

Может кто-нибудь сказать мне, как перечислить все ключи строк в таблице hbase?

4b9b3361

Ответ 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, но немного больше деталей никому не повредит.