Как я могу сканировать строки на основе шаблона строки в оболочке 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"))}