Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-10837

Filters failing to compare negative numbers (int,float,double or long)

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Blocker
    • Resolution: Duplicate
    • 0.94.2
    • None
    • Filters
    • Pseudo Mode

    • Hbase Filters Issue

    Description

      I have come across an issue while using filters to get a result.

      For eg.
      I have created a table and its specifications are as follows :

      table name --> test
      column family --> cf
      row keys --> rowKey1 - rowKey10 (10 different row keys)
      column qualifier --> integerData

      For different rowkeys, the qualifier 'integerData' contains either positive or negative integer values (data loaded randomly).

      Now, while I am trying to retrieve the data from the table based on a filter condition, its failing to give the desired result.

      For eg. say,
      My table contains following data :
      [-50,-40,-30,-20,-10,10,20,30,40,50]

      I want to get only those values which are greater than or equal to 40.
      Following is the code for the filter set on scan :

      ********************************************
      Scan scan = new Scan();
      scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes(" integerData"));

      int i = 40;
      Filter filter = new ValueFilter(CompareOp.GREATER_OR_EQUAL,new BinaryComparator(Bytes.toBytes));

      scan.setFilter(filter);
      *********************************************

      The result should be : 40 and 50
      BUT, the actual result is : -50, -40, -30, -20, -10, 40, 50

      I have read few posts which addressed this issue, and few people provided the solution as:

      1) write a custom comparator, as BinaryComparator is not meant for number comparison
      OR
      2) retrieve all the values as integer and then compare

      BUT, I want to know if there is any other way to achieve this.
      Because this seems to be a very basic need, i.e. comparing numbers, and I feel HBase should have something straight forward to deal with this.
      This comparison fails only when the negative numbers are involved.

      I am not able to get the right way to do it.

      My Hbase version is 0.94.2 and I am running it in pseudo mode.

      Can anyone help me on this ?

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              Chandraprakash Chandraprakash Sahu
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: