проверить таблицу hbase на наличие строки, в которой значение поля столбца пустое - PullRequest
0 голосов
/ 27 января 2020

Я хотел бы выполнить сканирование с быстрой фильтрацией в оболочке hbase, чтобы получить любые записи, в которых указанное значение столбца c равно нулю или пусто. Мне сказали, что я могу сделать это и в PIG, но я тоже не знаю, как это сделать. Может кто-нибудь, пожалуйста, помогите с любым методом, чтобы решить эту проблему. Я буду, как последний вариант сделать в java, но просто думал, что это будет быстрее?

 **TableName, columnFamily, column**
 test:table     collected:url

Спасибо.

РЕДАКТИРОВАТЬ:

Попробовал следующее:

  scan 'test:table',{ COLUMNS => 'collected:url', LIMIT => 10, FILTER => "ValueFilter( =, 'binaryprefix:<>' )"}

Нет результатов, может быть, это работает, но выглядит ли это правильно?

РЕДАКТИРОВАТЬ 2:

Ошибка вернулась:

     hbase(main):008:0> scan 'test:table', {FILTER => 
    SingleColumnValueFilter.new(Bytes.toBytes('collected'), 
    Bytes.toBytes('url'), CompareFilter::CompareOp.valueOf('EQUAL'), 
    Bytes.toBytes(''), true, true), COLUMNS => 'collected:url' }
    ArgumentError: wrong number of arguments (6 for 4)

1 Ответ

1 голос
/ 27 января 2020

Вам действительно не нужна свинья для решения вашей проблемы.

В оболочке Hbase SingleColumnValueFilter должен вам помочь. Вам необходимо установить filterIfMissing на false, что на самом деле является значением по умолчанию. Таким образом, ваше сканирование должно выглядеть так:

import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.util.Bytes

scan 'YourTable', {FILTER => SingleColumnValueFilter.new(Bytes.toBytes('family'), Bytes.toBytes('field'), CompareFilter::CompareOp.valueOf('EQUAL'), Bytes.toBytes('')), COLUMNS => 'family:field' }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...