I just re-used what Vrushali sent. I write that in the email so might not
compile. But will give the idea.

FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ONE);
SingleColumnValueFilter filter1 = new
QualifierFilter(CompareFilter.CompareOp.NOT_EQUAL,
 new BinaryPrefixComparator(Bytes.add(Bytes.toBytes("c!"),
Constants.SEP_BYTES))));

list.add(filter1);

SingleColumnValueFilter filter2 = new
QualifierFilter(CompareFilter.CompareOp.EQUAL,

new BinaryPrefixComparator(Bytes.add(Bytes.toBytes("c!someName"),
Constants.SEP_BYTES))))
list.add(filter2);
scan.setFilter(list);


To pass the first, value should NOT be starting with c!.
To pass the 2nd, value SHOULD start with c!someName.

So c!notThis will fail for the first since it start with c!. and it will
fail for the second since it's not starting with c!someName.

Make sense?


2014-06-05 20:27 GMT-04:00 Ted Yu <[email protected]>:

> If we test c!notThis first will give false, second too. We rejest.
> If we test d!this first will give true, second false. We take it.
>
> Assuming the first filter compares against c!someName (negated), why
> would 'c!notThis'
> give false ?
>
> Mind showing the definition of the FilterList ?
>
> Cheers
>
>
> On Thu, Jun 5, 2014 at 4:52 PM, Jean-Marc Spaggiari <
> [email protected]
> > wrote:
>
> > He want to excluse everything starting with "c!" and keep c!someName.
> >
> > So. First filter is a NOT, second is a include.
> >
> > If we test c!notThis first will give false, second too. We rejest.
> > If we test d!this first will give true, second false. We take it.
> > If we test c!someName first will give false, second will give true. We
> take
> > it.
> >
> > Do I miss something? It's possible because it's confusing ;) But I think
> it
> > might work.
> >
> > JM
> >
> >
> > 2014-06-05 19:47 GMT-04:00 Ted Yu <[email protected]>:
> >
> > > MUST_PASS_ONE represents boolean OR operator.
> > >
> > > According to Vrushali's description, "c!someName" should be excluded.
> > >
> > > Would MUST_PASS_ONE achieve what Vrushali wanted ?
> > >
> > > Cheers
> > >
> > >
> > > On Thu, Jun 5, 2014 at 4:33 PM, Jean-Marc Spaggiari <
> > > [email protected]
> > > > wrote:
> > >
> > > > I will still give a try to the 2 filters options.
> > > >
> > > > RegEx are nice and powerful but very expensive. It's non trivial.
> While
> > > the
> > > > prefix comparator is pretty simple and fast. So I'm not sure which of
> > > the 2
> > > > options will be faster.
> > > >
> > > > My opinion: Code wise, RegEx will be simpler, 2 filters will be
> faster.
> > > >
> > > >
> > > > 2014-06-05 18:55 GMT-04:00 Ted Yu <[email protected]>:
> > > >
> > > > > You're welcome.
> > > > >
> > > > > Filters / comparators shipped with HBase are pretty powerful.
> > > > >
> > > > >
> > > > > On Thu, Jun 5, 2014 at 3:04 PM, Vrushali C <[email protected]>
> > wrote:
> > > > >
> > > > > > Thanks Ted! Using that regex comparator helped me resolve this.
> > > > > Appreciate
> > > > > > it very much!
> > > > > >
> > > > > >
> > > > > >   On Thursday, June 5, 2014 2:23 PM, Ted Yu <[email protected]
> >
> > > > wrote:
> > > > > >
> > > > > >
> > > > > > Or, you can use RegexStringComparator.
> > > > > >
> > > > > > Here is a regex string, in Java, that matches columns with prefix
> > c!
> > > > > except
> > > > > > column called c!someName :
> > > > > >
> > > > > > "^c\\!((?!someName).)*$"
> > > > > >
> > > > > > Cheers
> > > > > >
> > > > > >
> > > > > > On Thu, Jun 5, 2014 at 1:26 PM, Ted Yu <[email protected]>
> > wrote:
> > > > > >
> > > > > > > One option is to write your own Comparator (similar to
> > > > > > BinaryPrefixComparator
> > > > > > > in essence) that treats the known column name specially.
> > > > > > >
> > > > > > > Cheers
> > > > > > >
> > > > > > >
> > > > > > > On Thu, Jun 5, 2014 at 12:52 PM, Vrushali C <
> [email protected]>
> > > > > wrote:
> > > > > > >
> > > > > > >>
> > > > > > >>
> > > > > > >> Hi
> > > > > > >> Is there a way to do this kind of filtering : In my scan, I
> want
> > > to
> > > > > > >> retrieve all columns except for columns starting with a
> certain
> > > > > prefix.
> > > > > > But
> > > > > > >> within that set of columns being ignored, I have one known
> > column
> > > > name
> > > > > > that
> > > > > > >> I want to retrieve but ignore the rest. The reason is that
> > columns
> > > > > with
> > > > > > >> this prefix have a lot of data and I am not interested in
> > > everything
> > > > > > EXCEPT
> > > > > > >> one of those.
> > > > > > >>
> > > > > > >> So for ignoring the columns with a certain prefix in the
> scan, I
> > > am
> > > > > > doing
> > > > > > >> something like
> > > > > > >> filters.addFilter(
> > > > > > >>      new QualifierFilter(CompareFilter.CompareOp.NOT_EQUAL,
> > > > > > >>        new BinaryPrefixComparator(
> > > > > > >>                Bytes.add(Bytes.toBytes("c!"),
> > > > Constants.SEP_BYTES))))
> > > > > > >>
> > > > > > >> Which works. But what I also want to add, is something like
> this
> > > > > > >>
> > > > > > >> filters.addFilter(
> > > > > > >>      new QualifierFilter(CompareFilter.CompareOp.EQUAL,
> > > > > > >>        new BinaryPrefixComparator(
> > > > > > >>                Bytes.add(Bytes.toBytes("c!someName"),
> > > > > > >> Constants.SEP_BYTES))))
> > > > > > >>
> > > > > > >> I realize both filters are contradictory to each other, so how
> > do
> > > I
> > > > > > >> achieve this?
> > > > > > >>
> > > > > > >> thanks
> > > > > > >> Vrushali
> > > > > > >>
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to