【问题标题】:How to access Phoenix table from Hbase如何从 Hbase 访问 Phoenix 表
【发布时间】:2023-04-01 08:03:01
【问题描述】:

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

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

【问题讨论】:

    标签: hbase phoenix


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答。你能告诉日期类型是如何反序列化的吗?
    • @zebb 我认为表的架构是在行数据旁边的其他地方定义的,这意味着数据类型没有使用您看到的值进行序列化。但是当它解析数据时,Phoenix 可以从模式中获取数据类型并尝试将其反序列化为BigDecimal
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2018-06-16
    相关资源
    最近更新 更多