Hi Akbar,

In order to do numerical comparison first you will need to store the
numberical comparsion data as a Number rather than a String. For storing
numerical data you will need to write a custom mapper if you are using
HBase bulk loading.
Once you have store the data as number rather Strings then you will need to
use the BinaryComparator.
Hope this Helps

-Anil

On Fri, Apr 20, 2012 at 3:57 AM, Bijieshan <bijies...@huawei.com> wrote:

> Akbar,
>
> I think you need to customize a comparator yourself. You can't get the
> results you want by using BinaryComparator.
> Hope I get you correctly.
>
> Jieshan.
>
> -----Original Message-----
> From: Akbar Gadhiya [mailto:akbar.gadh...@gmail.com]
> Sent: Friday, April 20, 2012 6:19 PM
> To: user@hbase.apache.org
> Subject: Compare range of numbers on column family
>
> Hello,
>
> I need help in scanning data with column family value.
>
> With this sample data and scan command, first scan command returns nothing
> and second returns row containing 6000.
>
> PK.john.20120422 column=alternateKey:ms, timestamp=1334912415796,
> value=6000
>
> My use case is to scan records which falls between start and end timestamp.
> (timestamp is stored in column family alternateKey:ms)
> We can not use timestamp provided by hbase because it indicates time when
> record is inserted to hbase but we require timestamp related to business
> needs.
>
> We are trying to compare number as opposed to lexical comparison.  Is there
> any way I can perform this scan operation?
>
> My data and scan command look like,
>
> create 'demo', 'user', 'alternateKey', 'content'
>
> put 'innar_demo', 'PK.innar.20120418', 'user', 'Innar'
> put 'innar_demo', 'PK.innar.20120418', 'alternateKey:city', 'Tallinn'
> put 'innar_demo', 'PK.innar.20120418', 'alternateKey:phone', '0001'
> put 'innar_demo', 'PK.innar.20120418', 'alternateKey:ms', '1000'
> put 'innar_demo', 'PK.innar.20120418', 'content', 'Innar_GPB'
>
> put 'innar_demo', 'PK.akbar.20120418', 'user', 'Akbar'
> put 'innar_demo', 'PK.akbar.20120418', 'alternateKey:city', 'Ahmedabad'
> put 'innar_demo', 'PK.akbar.20120418', 'alternateKey:phone', '0002'
> put 'innar_demo', 'PK.akbar.20120418', 'alternateKey:ms', '2000'
> put 'innar_demo', 'PK.akbar.20120418', 'content', 'Akbar_GPB'
>
> put 'innar_demo', 'PK.ell.20120419', 'user', 'Ell'
> put 'innar_demo', 'PK.ell.20120419', 'alternateKey:city', 'Bangkok'
> put 'innar_demo', 'PK.ell.20120419', 'alternateKey:phone', '0003'
> put 'innar_demo', 'PK.ell.20120419', 'alternateKey:ms', '3000'
> put 'innar_demo', 'PK.ell.20120419', 'content', 'Ell_GPB'
>
> put 'innar_demo', 'PK.jane.20120420', 'user', 'Jane'
> put 'innar_demo', 'PK.jane.20120420', 'alternateKey:city', 'Jersey City'
> put 'innar_demo', 'PK.jane.20120420', 'alternateKey:phone', '0004'
> put 'innar_demo', 'PK.jane.20120420', 'alternateKey:ms', '4000'
> put 'innar_demo', 'PK.jane.20120420', 'content', 'Jane_GPB'
>
> put 'innar_demo', 'PK.michael.20120421', 'user', 'Michael'
> put 'innar_demo', 'PK.michael.20120421', 'alternateKey:city', 'Berlin'
> put 'innar_demo', 'PK.michael.20120421', 'alternateKey:phone', '0005'
> put 'innar_demo', 'PK.michael.20120421', 'alternateKey:ms', '5000'
> put 'innar_demo', 'PK.michael.20120421', 'content', 'Michael_GPB'
>
> put 'innar_demo', 'PK.john.20120422', 'user', 'John'
> put 'innar_demo', 'PK.john.20120422', 'alternateKey:city', 'London'
> put 'innar_demo', 'PK.john.20120422', 'alternateKey:phone', '0006'
> put 'innar_demo', 'PK.john.20120422', 'alternateKey:ms', '6000'
> put 'innar_demo', 'PK.john.20120422', 'content', 'John_GPB'
>
> import org.apache.hadoop.hbase.filter.FilterList
> import org.apache.hadoop.hbase.filter.FilterList::Operator
> import org.apache.hadoop.hbase.filter.CompareFilter
> import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
> import org.apache.hadoop.hbase.filter.SubstringComparator
> import org.apache.hadoop.hbase.filter.BinaryComparator
> import org.apache.hadoop.hbase.util.Bytes
> import org.apache.hadoop.hbase.filter.ColumnRangeFilter
>
> scan 'demo', {COLUMNS => ['alternateKey:ms'], FILTER =>
> FilterList.new(FilterList::Operator::MUST_PASS_ALL,
>
> java.util.Arrays.asList(SingleColumnValueFilter.new(Bytes.toBytes('alternateKey'),
> Bytes.toBytes('ms'), CompareFilter::CompareOp.valueOf('GREATER'),
> BinaryComparator.new(Bytes.toBytes('5000'))),
> SingleColumnValueFilter.new(Bytes.toBytes('alternateKey'),
> Bytes.toBytes('ms'), CompareFilter::CompareOp.valueOf('LESS'),
> BinaryComparator.new(Bytes.toBytes('10000')))))}
>
> scan 'demo', {COLUMNS => ['alternateKey:ms'], FILTER =>
> FilterList.new(FilterList::Operator::MUST_PASS_ALL,
>
> java.util.Arrays.asList(SingleColumnValueFilter.new(Bytes.toBytes('alternateKey'),
> Bytes.toBytes('ms'), CompareFilter::CompareOp.valueOf('GREATER'),
> BinaryComparator.new(Bytes.toBytes('5000'))),
> SingleColumnValueFilter.new(Bytes.toBytes('alternateKey'),
> Bytes.toBytes('ms'), CompareFilter::CompareOp.valueOf('LESS'),
> BinaryComparator.new(Bytes.toBytes('9000')))))}
>
>
> Thanks.
>



-- 
Thanks & Regards,
Anil Gupta

Reply via email to