как перечислить все ключи строк в таблице hbase? - PullRequest
21 голосов
/ 07 марта 2011

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

Ответы [ 6 ]

22 голосов
/ 10 ноября 2014

Оболочка HBase может использоваться для отображения всех ключей строки:

count 'table_name', { INTERVAL => 1 }
13 голосов
/ 05 сентября 2011

Это должно быть значительно быстрее (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();
  ...
}
5 голосов
/ 08 марта 2011
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();
  ...
}
2 голосов
/ 19 сентября 2016

Используйте метод getRow класса Result. В его описании говорится:

Метод получения ключа строки, соответствующего строке из который этот Результат был создан.

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

2 голосов
/ 27 февраля 2013

При выполнении сканирования таблицы, где требуются только ключи строки (без семейств, квалификаторов, значений или временных меток), добавьте FilterList с оператором MUST_PASS_ALL в сканер, используя setFilter. Список фильтров должен включать как FirstKeyOnlyFilter, так и KeyOnlyFilter. Использование этой комбинации фильтров приведет к наихудшему сценарию, при котором RegionServer будет считывать одно значение с диска и минимальный сетевой трафик клиенту для одной строки.

1 голос
/ 30 декабря 2013

Кажется, вы хотите использовать HBase Thrift-клиент в 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);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...