hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "@Sanjiv Singh" <sanjiv.is...@gmail.com>
Subject Re: Writing Custom - KeyComparator !!!
Date Wed, 27 Aug 2014 15:38:32 GMT
Hi Ted,

Yes it would work for country code like IND for 'india' , AUS for australia.

But in my use-case, It's full country name ( not just three alphabet
country code).

Regards
Sanjiv Singh
Mob :  +091 9990-447-339


On Wed, Aug 27, 2014 at 8:34 PM, Ted Yu <yuzhihong@gmail.com> wrote:

> Sanjiv:
> Is country code of fixed width ?
>
> If so, as long as country is the prefix, it would be sorted first.
>
> Cheers
>
>
> On Wed, Aug 27, 2014 at 8:00 AM, @Sanjiv Singh <sanjiv.is.on@gmail.com>
> wrote:
>
>> Hi JM,
>>
>> Thanks for link... I agree with you that i can be done when key is an
>> integer.
>>
>> Reason why i am asking for custom KeyComparator is that  Something key is
>> not just integer or some value , it can be of composition of multiple
>> values  like <COUNTRY><CITY> where key is made up of two values, one
is
>> COUNTRY and other is CITY.
>>
>> The way i wanted to order first them by COUNTRY , then by CITY.
>>
>> How can we do the same ?
>>
>>
>> Hope that I have taken correct example, emphasizes my use-case.
>>
>>
>> Regards
>> Sanjiv Singh
>> Mob :  +091 9990-447-339
>>
>>
>> On Wed, Aug 27, 2014 at 5:42 PM, Jean-Marc Spaggiari <
>> jean-marc@spaggiari.org> wrote:
>>
>> > Hi Sanjiv!!!! ;)
>> >
>> > If you want your keys to be ordered as Integers, why do you not simply
>> > store them as Integers and not as Strings? HBase order the rows
>> > alphabetically, and you can not change that. Yes you can implement a key
>> > comparator if you want but I don't think it's going to change anything
>> to
>> > this situation.
>> >
>> > You might want to take a look at this:
>> > http://hbase.apache.org/book/rowkey.design.html
>> >
>> > Just put your values that way:
>> >
>> >       int myKey = 22000;
>> >       Put put = new Put(Bytes.toBytes(myKey));
>> >
>> > And that will solve your ordering problem.
>> >
>> > JM
>> >
>> >
>> >
>> >
>> > 2014-08-27 6:09 GMT-04:00 @Sanjiv Singh <sanjiv.is.on@gmail.com>:
>> >
>> >>  Hi All,
>> >>
>> >> As we know,  All rows are always sorted lexicographically by their row
>> >> key.
>> >> In lexicographical order, each key is compared at binary level, byte by
>> >> byte and from left to right.
>> >>
>> >> See the example below , where row key is some integer value and output
>> of
>> >> scan show lexicographical order of rows in table.
>> >>
>> >> hbase(main):001:0> scan 'table1'
>> >> ROW        COLUMN+CELL
>> >> 1               column=cf1:, timestamp=1297073325971 ...
>> >> 11             column=cf 1:, timestamp=1297073337383 ...
>> >> 11000        column=cf1 :, timestamp=1297073340493 ...
>> >> 2               column=cf1:, timestamp=1297073329851 ...
>> >> 22             column=cf1:, timestamp=1297073344482 ...
>> >> 22000        column=cf1:, timestamp=1297073333504 ...
>> >> 23             column=cf1:, timestamp=1297073349875 ...
>> >>
>> >> I want to see these rows ordered as integer, not the default way. I can
>> >> pad
>> >> keys with '0' to get a proper sorting order(i don't like it).
>> >>
>> >> I wanted to see these rows sorted as integer , not just as output of
>> scan
>> >> OR get method , but also to store rows with consecutive integer row
>> keys
>> >> in
>> >> same block.
>> >>
>> >> Now the question is :
>> >>
>> >>    - Can we define our own custom KeyComparator ?
>> >>    - If Yes , can we enforce it for PUT method ?  so that rows would be
>> >>    stored as new KeyComparator.
>> >>    - Can we plug this comparator duriong SCAN method to change order of
>> >>
>> >>    result rows ?
>> >>
>> >> Hope, i have explained the proplem well,  seeking for your valuable
>> >> response on it.
>> >>
>> >>
>> >> Regards
>> >> Sanjiv Singh
>> >> Mob :  +091 9990-447-339
>> >>
>> >
>> >
>>
>
>

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