HBase (Easy): как выполнить сканирование префикса диапазона в оболочке hbase
Я разрабатываю приложение для работы на hbase и хочу в интерактивном режиме исследовать содержимое моего кластера. Я нахожусь в оболочке hbase, и я хочу выполнить сканирование всех ключей, начинающихся с символов "abc". Такие ключи могут включать в себя "abc4", "abc92", "abc20014" и т. Д. Я пробовал сканирование
hbase(main):003:0> scan 'mytable', {STARTROW => 'abc', ENDROW => 'abc'}
Но это, похоже, ничего не возвращает, так как технически нет строки "abc", только строки, начинающиеся с "abc"
То, что я хочу, это что-то вроде
hbase(main):003:0> scan 'mytable', {STARTSROWPREFIX => 'abc', ENDROWPREFIX => 'abc'}
Я слышал, что HBase может сделать это быстро и является одним из основных пунктов продажи. Как мне это сделать в оболочке hbase?
4 ответа
Так что получается очень легко. Диапазоны сканирования не включены, логика - начало <= ключ <конец. Так что ответ
scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
В последних версиях HBase вы теперь можете делать это в оболочке hbase:
scan 'mytable', {ROWPREFIXFILTER => 'abc'}
Это эффективно делает это (и также работает для бинарных ситуаций)
scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
Этот метод НАМНОГО более эффективен, чем подход "PrefixFilter", поскольку последний помещает все записи в код сравнения, который присутствует в этом классе PrefixFilter.
Принятое решение не будет работать во всех случаях (двоичные ключи). Кроме того, использование PrefixFilter может быть медленным, поскольку он выполняет сканирование таблицы, пока не достигнет префикса. Более эффективное решение - использовать STARTROW и FILTER, например, так:
scan 'my_table', {STARTROW => 'abc', FILTER => "PrefixFilter('abc')"}
Я думаю, что вам нужен фильтр
Оформить ответ на следующий вопрос Сканирование с использованием фильтра с использованием оболочки HBase
другие фильтры перечислены в http://hbase.apache.org/book/client.filter.html