Как получить конкретные строки в Hbase? - PullRequest
0 голосов
/ 19 февраля 2019

Мои rowKeys в HBase вот так;

a1s1
a1s2
a1s3
a2s1
a3s1
a3s2
...

Я хочу получить только эти данные;

a1s1
a2s1
a3s1

Но когда я запускаю этот запрос; сканирование 't1', {STARTROW => 'a1s1', ENDROW => 'a4s1'}

Это дает мне;

a1s1
a1s2
a1s3
a2s1
a3s1

Но я нехочу получить a1s2 и a1s3 .Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Вы должны использовать STARTROW-ENDROW и другой фильтр с RegexStringComparator.Если вы используете только начальный-конечный фильтр строк, hbase выполняет эту фильтрацию для каждого символа в вашем ключе строки.Потому что rowkey не числовой.В оболочке Hbase вы можете попробовать это:

import org.apache.hadoop.hbase.filter.CompareFilter

import org.apache.hadoop.hbase.filter.RegexStringComparator

scan 't1', {STARTROW => 'a1s1', ENDROW => 'a4s1', FILTER => org.apache.hadoop.hbase.filter.RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'),RegexStringComparator.new("s1$"))}
0 голосов
/ 19 февраля 2019

Полагаю, вы хотите получить ключ строки, начинающийся с "a *" и заканчивающийся "s1".

Так что вы можете использовать ниже:

 scan 't1', { ENDROW=>'s1'}

Или

scan 't1', {STARTROW=>'a', ENDROW=>'s1'}

Другой вариант - использовать regexString:

scan 't1', {FILTER => "RowFilter(=, 'regexstring:*s1')"}
...