The unexpected output is because you are using the *little endian* decoders in the convert_from() functions while HBase Bytes class uses big endian encoding.
That is why int value 10 (0x0000000A) shows up as 167772160 (0xA000000). Using the *big endian* decoders should give you the expected output. select convert_from(t.`default`.`int` , 'INT_BE') , convert_from(t.`default`.`double`, 'DOUBLE_BE' ) , convert_from(t.`default`.`float`, 'FLOAT_BE') from dfs.`demos/simple_table` t On Fri, Sep 30, 2016 at 12:01 AM, Tugdual Grall <[email protected]> wrote: > Hello, > > Thanks for your answer, but I did test that (sorry forgot to mention) and > it does not work. > When I use the cast I have the following error: > > -- > org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR: > NumberFormatException: Fragment 0:0 [Error Id: > fe0bf062-5219-443a-b874-19355fe0bbeb on maprdemo:31010] > --- > > Today, I am converting all the data into String in my Java application and > use the cast on String, that does work. (but I do not like this) > > > I think that your code is done for data that are store in String in MapR Db > Cells, where I want to store data in Java native types. > > Tug > > On Thu, Sep 29, 2016 at 7:54 PM, Abhishek Girish < > [email protected]> > wrote: > > > Hey Tug, > > > > You can query a HBase / MapR-DB Binary table as follows: > > > > > select cast(t.cf1.c1 as INTEGER), cast(t.cf1.c2 as BIGINT), > > cast(t.cf1.c3 as DOUBLE), cast(t.cf1.c4 as FLOAT), cast(t.cf1.c5 as > BIGINT) > > from mfs.`/t1` t; > > +---------+---------+----------+---------+---------+ > > | EXPR$0 | EXPR$1 | EXPR$2 | EXPR$3 | EXPR$4 | > > +---------+---------+----------+---------+---------+ > > | 10 | 22 | 123.123 | 99.99 | 1111 | > > +---------+---------+----------+---------+---------+ > > 1 row selected (0.198 seconds) > > > > OR > > > > > select convert_from(t.cf1.c1, 'UTF8'), convert_from(t.cf1.c2, 'UTF8'), > > convert_from(t.cf1.c3, 'UTF8'), convert_from(t.cf1.c4, 'UTF8'), > > convert_from(t.cf1.c5, 'UTF8') from mfs.`/t1` t; > > +---------+---------+----------+---------+---------+ > > | EXPR$0 | EXPR$1 | EXPR$2 | EXPR$3 | EXPR$4 | > > +---------+---------+----------+---------+---------+ > > | 10 | 22 | 123.123 | 99.99 | 1111 | > > +---------+---------+----------+---------+---------+ > > 1 row selected (0.151 seconds) > > > > > > One thing which I'm not clear is if storing values with type is > supported. > > I mean "99.99f" vs just "99.99" for float. I only got the latter one to > > work. With Drill explicit casts, I don't think that should be an issue > > though. > > > > On Thu, Sep 29, 2016 at 6:51 AM, Tugdual Grall <[email protected]> > wrote: > > > >> Hello, > >> > >> My HBase (MapR-DB to be exact) application is saving values as numerical > >> data types as follow: > >> > >> > >> ==== > >> int intValue = 10; > >> long longValue = 22l; > >> double doubleValue = 123.123; > >> float floatValue = 99.99f; > >> BigDecimal bigDecimal = new BigDecimal(1111); > >> > >> > >> put.addColumn( Bytes.toBytes("default") , Bytes.toBytes("int"), > >> Bytes.toBytes( intValue ) ); > >> put.addColumn( Bytes.toBytes("default") , Bytes.toBytes("long"), > >> Bytes.toBytes( longValue ) ); > >> put.addColumn( Bytes.toBytes("default") , Bytes.toBytes("double"), > >> Bytes.toBytes( doubleValue ) ); > >> put.addColumn( Bytes.toBytes("default") , Bytes.toBytes("float"), > >> Bytes.toBytes( floatValue ) ); > >> put.addColumn( Bytes.toBytes("default") , > Bytes.toBytes("bigDecimal"), > >> Bytes.toBytes( bigDecimal ) ); > >> ==== > >> > >> > >> I am trying to use the convert_from drill function to get the values out > >> of > >> my database, but it does not work the way I was expecting... > >> > >> select > >> convert_from(t.`default`.`int` , 'INT') , > >> convert_from(t.`default`.`double`, 'DOUBLE' ) , > >> convert_from(t.`default`.`float`, 'FLOAT') > >> from dfs.`demos/simple_table` t > >> +------------+------------------------+---------------+ > >> | EXPR$0 | EXPR$1 | EXPR$2 | > >> +------------+------------------------+---------------+ > >> | 167772160 | 2.79722325089736E-167 | -5.782555E20 | > >> +------------+------------------------+---------------+ > >> > >> > >> 1- What is the proper way to query HBase/MapR-DB to get the proper > value? > >> > >> 2- Can I use such datatypes, or I need to store everything as String? > >> > >> Regards > >> Tug > >> > > > > >
