javahadoopbigdatahbaseapache-phoenix

hbase GREATER_OR_EQAUL operator does not work as expected


i have this row in my hbase table: {rowkey:1_1611646861574/cf:value/1611646776287/Put/vlen=8/seqid=0} now i want to do a simple scan and find rows where their column value is greater than "1611388300000". but it does not return any record; however it returns this record when i use LESS_OR_EQUAL than 1611647500000. the weird thing is i can get this record from apache phoenix sql query: select * from my_table where value>=1611388300000.

so number is a obviously bigger than column value and apache phoenix returns it; why hbase compare Operator does not?

here is my code:

Table table = con.getTable(TableName.valueOf("my_table"));
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("value"));
FilterList flist = new FilterList(FilterList.Operator.MUST_PASS_ALL);
flist.addFilter(new PrefixFilter(Bytes.toBytes("1")));
flist.addFilter(new SingleColumnValueFilter(
                        Bytes.toBytes("cf"), Bytes.toBytes("value"), CompareOperator.GREATER_OR_EQUAL,
                        new BinaryComparator(Bytes.toBytes("1611388300000"))));
scan.setFilter(flist);
ResultScanner scanner = table.getScanner(scan);
for (Result result = scanner.next(); result != null; result = scanner.next())
     System.out.println("Found row : " + result);
scanner.close();

Solution

  • i dont exactly know why but LESS_OR_EQUAL works with string:

    new SingleColumnValueFilter(
                        Bytes.toBytes("cf"), Bytes.toBytes("value"), CompareOperator.LESS_OR_EQUAL,
                        new BinaryComparator(Bytes.toBytes("1611647500000")))
    

    but GREATER_OR_EQUAL did not work when i used quotes so i had to use number (L is added to specify Long)

    new SingleColumnValueFilter(
                            Bytes.toBytes("ui"), Bytes.toBytes("C"), CompareOperator.GREATER_OR_EQUAL,
                            new BinaryComparator(Bytes.toBytes(1611388300000L)))