It sounds like you might be storing the toString() representation of a byte array of HBase.
Could you post an example snippet of the code you're using to store things in HBase, as well as a snippet of how you're reading this data in the HBase shell (or wherever you're reading it). On Thu, Jan 8, 2015 at 12:44 PM, Lavrenty Eskin <[email protected]> wrote: > Hi Gabriel, > > But why then I receive in HBase shell two different string representation of > the byte array? > For byte arrays stored from phoenix - \x00\x00\x00\x00I\x96\x02\xD2 and > [B@13217cf6 for stored from HBase. > The same time phoenix have wrong understanding of "[B@13217cf6" and receives > -323837278362736236786-like value instead 1234567890 > I have to understand the way to store values via hbase API but read from > phoenix then correctly. > > Thanks > > -----Original Message----- > From: Gabriel Reid [mailto:[email protected]] > Sent: Thursday, January 08, 2015 2:09 PM > To: [email protected] > Subject: Re: Numbers low-level format in Phoenix > > Hi Lavrenty, > > Phoenix actually does store numerical data using byte arrays, in a similar > fashion to what the HBase bytes class does. There's more information on the > various types and their underlying encoding available here: > http://phoenix.apache.org/language/datatypes.html > > I'm guessing you got the string representation > ("\x00\x00\x00\x00I\x96\x02\xD2") from the HBase shell -- this is a string > representation of the byte array (containing 8 bytes) containing the > serialized value of 1234567890. The strings you posted like "[B@13217cf6" are > the default string representation of byte arrays in java. To convert these to > a human-readable value (like what the HBase shell does), you could do the > following: > > Bytes.toStringBinary(Bytes.toBytes(1234567890L)); > > - Gabriel > > On Thu, Jan 8, 2015 at 9:44 AM, Lavrenty Eskin > <[email protected]> wrote: >> Helo all, >> I'm surprised that phoenix store numbers not in HBase 'Byte' format. Looks >> like a big overhead there, isn't it? >> Just takes 1234567890 value (0х499602D2): >> Phoenix stores that as string '\x00\x00\x00\x00I\x96\x02\xD2' >> But why it cannot store as in HBase format value=[B@499602d2 ? >> >> Another issue is why it write wrong bytes if you write from HBase shell? : >> Bytes.toBytes(1234567890) -->> value=[B@13217cf6, >> Bytes.toBytes(1234567890L) -->> value=[B@3caab4f > > > ________________________________ > The information transmitted herein is intended only for the person or entity > to which it is addressed and may contain confidential, proprietary and/or > privileged material. Any review, retransmission, dissemination or other use > of, or taking of any action in reliance upon, this information by persons or > entities other than the intended recipient is prohibited. If you received > this in error, please contact the sender and delete the material from any > computer.
