#hbase #hbase-shell
#hbase #hbase-оболочка
Вопрос:
У меня есть таблица person в HBase, как показано ниже —
ROW_KEY COLUMN CELL
dinesh column='details:code',value=dr-01
dinesh column='status:is_error',value=false
dinesh column='time:date_created',value=1553747864740
dinesh column='time:last_updated',value=1553747864740
alex column='details:code',value=al-01
alex column='time:date_created',value=1553747786521
alex column='time:last_updated',value=1553747786521
Я хочу получить только те записи, где поле is_error равно false. Этот атрибут будет присутствовать только в определенных строках. Я попытался извлечь его с помощью SingleColumnValueFilter, но он выдает мне все записи.
Запрос:
scan 'person', {FILTER=>"SingleColumnValueFilter('status','is_error',=,'binary:false')"}
Вывод:
ROW_KEY COLUMN CELL
dinesh column='details:code',value=dr-01
dinesh column='status:is_error',value=false
dinesh column='time:date_created',value=1553747864740
dinesh column='time:last_updated',value=1553747864740
alex column='details:code',value=al-01
alex column='time:date_created',value=1553747786521
alex column='time:last_updated',value=1553747786521
Ожидаемым результатом должна быть только одна строка, соответствующая заданному условию, но она возвращает две строки, где поле is_error отсутствует.
Ответ №1:
Вам нужно использовать другой конструктор для вашего фильтра:
protected SingleColumnValueFilter(byte[] family,
byte[] qualifier,
CompareOperator op,
ByteArrayComparable comparator,
boolean filterIfMissing,
boolean latestVersionOnly)
filterIfMissing
гарантирует, что строки, не содержащие ваш столбец, не будут возвращены. Я понятия не имею, почему это не поведение по умолчанию.
Ваше сканирование должно быть:
scan 'person', {FILTER=>"SingleColumnValueFilter('status','is_error', =, 'binary:false', true, true)"}