сканировать таблицу hbase для строки, где значение поля столбца пусто

Я хотел бы выполнить быстрое сканирование с фильтрацией в оболочке hbase, чтобы получить любые записи, в которых определенное значение столбца равно нулю или пусто. Мне сказали, что я могу сделать это и в 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)

person vbNewbie    schedule 27.01.2020    source источник


Ответы (1)


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

В оболочке 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' }
person Lyashko Kirill    schedule 27.01.2020
comment
Спасибо за ответ. Как импортировать эти библиотеки из командной строки оболочки? мне просто отправить как это в командной строке? Я получаю ошибку неправильного количества аргументов (6 на 4) - person vbNewbie; 27.01.2020
comment
Они должны быть импортированы по умолчанию. Можете ли вы отправить точное сообщение об ошибке, которое у вас есть? - person Lyashko Kirill; 27.01.2020
comment
В своем обновлении я удалил последние логические параметры. Поскольку используется значение по умолчанию, нет необходимости указывать их явно. Но в любом случае любопытно, что это не работает для вас. Какая у вас версия HBase? - person Lyashko Kirill; 28.01.2020
comment
Благодарю. заставил его работать. Мне пришлось повторно импортировать библиотеки, сбросить логические параметры, и это сработало. еще раз спасибо. - person vbNewbie; 28.01.2020
comment
@LyashkoKirill у вас есть идеи, почему этот фильтр не работает и возвращает записи для данных == (или null) FILTER => "SingleColumnValueFilter('family', 'has_data', =, 'binary:true', true, true) AND SingleColumnValueFilter('family', 'data', !=, 'binary:')". Моя цель - получить записи, где has_data == true и data != null/пусто - person abiratsis; 22.07.2021