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

HBase (Easy): как выполнять префикс диапазона сканирования в оболочке hbase

Я разрабатываю приложение для работы на hbase и хочу интерактивно исследовать содержимое моего кластера. Я в оболочке hbase, и я хочу выполнить проверку всех ключей, начинающихся с символов "abc" . Такие клавиши могут включать "abc4", "abc92", "abc20014" и т.д. Я пробовал сканирование

hbase(main):003:0> scan 'mytable', {STARTROW => 'abc', ENDROW => 'abc'}

Но это, похоже, ничего не возвращает, так как технически нет rowkey "abc" только rowkeys, начинающихся с "abc"

Я хочу что-то вроде

hbase(main):003:0> scan 'mytable', {STARTSROWPREFIX => 'abc', ENDROWPREFIX => 'abc'}

Я слышал, что HBase может сделать это быстро и является одним из основных пунктов продажи. Как это сделать в оболочке hbase?

Спасибо заранее.

4b9b3361

Ответ 1

Так получается, что это очень легко. Диапазоны сканирования не включены, логика начинается <= ключ < конец. Итак, ответ

scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}

Ответ 2

Принятое решение не будет работать во всех случаях (двоичные ключи). Кроме того, использование PrefixFilter может быть медленным, поскольку оно выполняет сканирование таблицы, пока не достигнет префикса. Более эффективным решением является использование STARTROW и FILTER следующим образом:

 scan 'my_table', {STARTROW => 'abc', FILTER => "PrefixFilter('abc')"}

Ответ 3

В последних версиях HBase теперь вы можете сделать в оболочке hbase:

scan 'mytable', {ROWPREFIXFILTER => 'abc'}

Это эффективно делает это (а также работает для двоичных ситуаций)

scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}

Этот метод LOT более эффективен, чем подход "PrefixFilter", поскольку последний помещает все записи через код сравнения, присутствующий в этом классе PrefixFilter.