2016-09-14 65 views
0

我试图访问通过Phoenix从Hbase创建的表。我能够读取字符串值,但无法读取十进制值。例如,DECIMAL_PLACE_CNT的实际值为6,但从hbase shellit显示的值= \ xC1 \ x07
我怎样才能将它推断回6?如何从Hbase访问Phoenix表

get 'ODS.CCY',"\x00ANG" 
COLUMN         CELL 
0:CCY_CTRY_CD       timestamp=1470245652652, value=NL 
0:CCY_DESC        timestamp=1470245652652, value=NETHERLANDS ANTILLIAN GUILDER 
0:CCY_RVSE_IND       timestamp=1470245652652, value=N 
0:DECIMAL_PLACE_CNT      timestamp=1470245652652, value=\xC1\x07 

回答

0

如上所述here,当与DECIMAL类型定义的列,凤凰将映射值来java.math.BigDecimal
当向Hbase写入值时,Phoenix将使用org.apache.phoenix.schema.types.PDataType.toBytesjava.math.BigDecimal的值序列化。该方法的源代码是here,通过搜索static int toBytes可以找到准确的位置。

+0

感谢您的回答。你能否告诉日期类型是如何反序列化的? – zebb

+0

@zebb我认为表的模式是在行数据旁边的其他位置定义的,这意味着数据类型不会与您看到的值序列化。但是当它解析数据时,Phoenix可以从模式中获取数据类型,并尝试将其反序列化为“BigDecimal”。 –