Hi,

I will try to write a sample code and execute it , but what i gather from the blog and the java apidoc is that u just need to do opposite of what u r doing .

so use
CompareOp.|*EQUAL <http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html#EQUAL>*| and then put a value so that it never occurs in you column ( this will filter out all the rows for which the column qualifier exists )

secondly

filter1.setFilterIfMissing(false)
since : If false, the row will pass if the column is not found. This is default. (taken from apidoc)

This way you should be able to get all the rows that don have the certain qualifier.

Regards,
Samar

On 08/05/13 8:17 PM, Ted Yu wrote:
I think you can implement your own filter that overrides this method:

   public void filterRow(List<KeyValue> ignored) throws IOException {
When certain qualifiers don't appear in the List, you can remove all the
kvs from the passed List.

Cheers

On Wed, May 8, 2013 at 7:00 AM, Amit Sela <[email protected]> wrote:

Forgot to mention: Hadoop 1.0.4 & HBase 0.94.2


On Wed, May 8, 2013 at 4:52 PM, Amit Sela <[email protected]> wrote:

Hi all,

I'm trying to scan my HBase table to get only rows that are missing some
qualifiers.

I read that for getting rows with specific qualifiers I should use
something like:

List list = new ArrayList<Filter>(2);
Filter filter1 = new SingleColumnValueFilter(Bytes.toBytes("fam1"),
  Bytes.toBytes("VALUE1"), CompareOp.DOES_NOT_EQUAL,
Bytes.toBytes("DOESNOTEXIST"));
filter1.setFilterIfMissing(true);
list.addFilter(filter1);
Filter filter2 = new SingleColumnValueFilter(Bytes.toBytes("fam2"),
  Bytes.toBytes("VALUE2"), CompareOp.DOES_NOT_EQUAL,
Bytes.toBytes("DOESNOTEXIST"));
filter2.setFilterIfMissing(true);
list.addFilter(filter2);
FilterList filterList = new FilterList(list);
Scan scan = new Scan();
scan.setFilter(filterList);

(I found this here:

http://mapredit.blogspot.co.il/2012/05/using-filters-in-hbase-to-match-two.html
)
And it works just fine.

So as I thought that if I use SkipFilter(FilterList) I'll skip the rows
returned by the filter list >> causing a sort of NOT and getting all rows
that don't have any of theses qualifiers.

This doesn't seem to work... Anyone has a good suggestion how to get rows
that are missing specific qualifiers ? Any idea why SkipFilter fails ?

Thanks,

Amit


Reply via email to