Получите ключи строки HBase в диапазоне без получения данных? - PullRequest
6 голосов
/ 14 апреля 2011

Есть ли способ получить ключи строки в заданном диапазоне без фактического извлечения столбцов / CF, связанных с этим ключом строки?

Для пояснения : в моем примере ключи строк нашей таблицы являются именами биржевых тикеров (например, GOOG), и в нашем веб-приложении мы хотели бы заполнить виджет автозаполнения, используя только те ключи строк, которые есть в базе данных. Очевидно, что если мы получим все данные (а не только названия акций) для всех акций между G и H, когда пользователь наберет «G», мы будем излишне напрягать нашу систему. Есть идеи?

Ответы [ 5 ]

9 голосов
/ 09 мая 2012

взгляните на фильтры (http://hbase.apache.org/book/client.filter.html), особенно KeyOnlyFilter. Описание фильтра (http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/package-summary.html) равно

Фильтр, который будет возвращать только ключевой компонент каждогоKV (значение будет перезаписано как пустое).

, чтобы ограничить ключи в определенном диапазоне, используйте конструктор Scan (rowStart, rowEnd).

7 голосов
/ 26 мая 2015

Согласно официальной документации, вы можете оптимально получить только ключи строк, используя комбинацию двух фильтров: KeyOnlyFilter и FirstKeyOnlyFilter.(Я думаю, что «FirstKeyOnlyFilter» вернет ключ только один раз, даже с большими и сложными строками.) Если вам нужны только ключи в заданном диапазоне, вы можете добавить этот диапазон в сканер.пример кода:

FilterList filters = new FilterList(FilterList.Operator.MUST_PASS_ALL,
            new FirstKeyOnlyFilter(),
            new KeyOnlyFilter());
Scan s = new Scan(filters);
// in order to limit the scan to a range
s.setStartRow(startRowKey);  // first key in range
s.setStopRow(stopRowKey);    // key value after the last key in the range

Источник: https://hbase.apache.org/book.html#perf.hbase.client.rowkeyonly

1 голос
/ 17 февраля 2012

Я бы создал семейство столбцов с именем 'empty:' и сохранил бы пустые значения для всех строк. Теперь вы можете просто запросить загрузку столбца «empty:». Это не идеально, но это лучше, чем загружать семейства столбцов с большим количеством данных.

0 голосов
/ 16 декабря 2011

Один из подходов состоит в том, чтобы сохранить другую индексную таблицу, в которой были бы ключи для всех возможных состояний FSA для всех акций.Поэтому в следующий раз, когда пользователь вводит «G», все, что вам нужно сделать, это нажать на эту таблицу, и получить может быть разделенный запятыми список всех значений, связанных с G.

0 голосов
/ 20 июня 2011

вы можете использовать addFamily (семейство byte []) или addFamily (семейство byte [], спецификатор byte []) для получения только соответствующих данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...