Sanjiv: Is there a reason for you to choose full country name ? Row key would be stored for every KeyValue in the same row, choosing abbreviation would reduce storage cost.
Cheers On Wed, Aug 27, 2014 at 8:38 AM, @Sanjiv Singh <[email protected]> wrote: > 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 <[email protected]> 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 <[email protected]> >> 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 < >>> [email protected]> 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 <[email protected]>: >>> > >>> >> 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 >>> >> >>> > >>> > >>> >> >> >
