Как я могу сканировать строки на основе шаблона строки в оболочке HBase?

Я хочу сканировать строки в HTable из оболочки HBase, используя строки, соответствующие некоторому шаблону.

Например, у меня есть следующие данные таблицы:

    row:r1_t1  column:cf:a, timestamp=1461911995948,value=v1
    row:r2_t2  column:cf:a, timestamp=1461911995949,value=v2
    row:s1_t1  column:cf:a, timestamp=1461911995950,value=q1
    row:s2_t2  column:cf:a, timestamp=1461911995951,value=q2

На основании приведенных выше данных я хочу найти строки, которые содержат 't1':

    row:r1_t1  column:cf:a, timestamp=1461911995948,value=v1
    row:s1_t1  column:cf:a, timestamp=1461911995950,value=q1

Я знаю, что могу сканировать таблицу с помощью PrefixFilter, но этот метод принимает строки, начинающиеся с указанного фильтра.

    scan 'test', {FILTER => "(PrefixFilter('s')"}

Существует ли аналогичный способ сканирования таблицы на основе фильтрации строк с шаблоном, совпадающим в середине имени строки?

1 ответ

Решение
hbase(main):003:0> scan 'test', {ENDROW => 't1'}

В общем, используя PrefixFilter может быть медленным, потому что выполняет сканирование таблицы, пока не достигнет префикса.

Также можно использовать RowFilter с SubstringComparator, как показано ниже

Можешь использовать RowFilter с SubstringComparator как ниже

hbase(main):003:0> import org.apache.hadoop.hbase.filter.CompareFilter
hbase(main):005:0> import org.apache.hadoop.hbase.filter.SubstringComparator
hbase(main):006:0> scan 'test', {FILTER => org.apache.hadoop.hbase.filter.RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'),SubstringComparator.new("searchkeyword"))}
Другие вопросы по тегам