hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Samuru Jackson <samurujack...@googlemail.com>
Subject Re: Scanning half a key or value in HBase
Date Mon, 23 Aug 2010 18:28:26 GMT
One thing I forgot:

You will need to add the separator to your search value (In your case
underscore):

searchValue = "123" + "_";

Otherwise you might get unwanted multiple results!

/SJ

On Mon, Aug 23, 2010 at 10:32 AM, Samuru Jackson <
samurujackson@googlemail.com> wrote:

> Hi,
>
> I do it this way:
>
> The variable searchValue is my Prefix like in your case 123 would be:
>
> searchValue = "123";
>
> PrefixFilter prefixFilter = new PrefixFilter(Bytes.toBytes(searchValue));
> Scan scan = new Scan();
> scan.addFamily(Bytes.toBytes(this.REF_FAM));
> scan.setFilter(prefixFilter);
> ResultScanner resultScanner = hBaseTable.getScanner(scan);
>
> Now you can iterate over the resultScanner.
>
> Is this what you were looking for?
>
> /SJ
>
>
>
>
>
> On Mon, Aug 23, 2010 at 6:00 AM, Michelan Arendse <michelan@addynamo.com>
> wrote:
> > Hi,
> >
> > Thanks for the responses but it's still not what I am really looking for.
> >
> > The row id looks something like: number_string so it would be 123_foo,
> 123_foo2 123_foo3.
> > So now I want to find all the foo's that are related to the first half of
> the key which is "123".
> >
> > Also I can't add start row if I do not know where 123 starts. And I can't
> search for the start row, as I need this to be very fast.
> >
> > Thanks.
> >
> >
> > -----Original Message-----
> > From: Ryan Rawson [mailto:ryanobjc@gmail.com]
> > Sent: 17 August 2010 09:01 PM
> > To: user@hbase.apache.org
> > Subject: Re: Scanning half a key or value in HBase
> >
> > Hey,
> >
> > One thing to watch out for is ascii with separator variable length
> > keys, you would think if your key structure was:
> >
> > foo:bar
> >
> > starting at 'foo' and ending at 'foo:' might give you only keys which
> > start with 'foo:' but this doesn't work like that.  You also get keys
> > like:
> > foo123:bar
> >
> > you must start the scan at 'foo:' but you can't just end it at 'foo;'
> > (since next(:) == ';' in ascii), this has to do with the ordering of
> > ASCII, for a reference look at http://www.asciitable.com/
> >
> > The bug-free solution is to start your scan at 'foo:' and use a prefix
> > filter set to 'foo:'.
> >
> > If you are scanning fixed-width keys, eg: binary conversions of longs,
> > then the [start,start+1) solution works.
> >
> > On Tue, Aug 17, 2010 at 5:59 AM, Andrey Stepachev <octo47@gmail.com>
> wrote:
> >> Use scan where start key is <first_half_of_key> itself as bytearray, and
> >> stop key is <first_half_of_key> with last byte in bytearray + 1.
> >>
> >> example
> >> abc% should be scan(abc, abd)
> >>
> >> 2010/8/17 Michelan Arendse <michelan@addynamo.com>:
> >>> Hi
> >>>
> >>> I am not sure if this is possible in HBase. What I am trying to do is
> scan on a HBase table with something similar to how SQL would do it.
> >>> e.g. SELECT *
> >>>         FROM <table>
> >>>         WHERE <primary key> LIKE '<first_half_of_key>%' ;
> >>>
> >>> So as you can see from above I want to scan the table with only part of
> the row key, since the key is a combination of 2 fields in the table.
> >>>
> >>> Regards,
> >>> Michelan Arendse
> >>>
> >>>
> >>>
> >>
> >
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message