吹静静

欢迎QQ交流:592590682

环境介绍

各组件已经安装完成状态下进行此操作。

先在HBase中建表,后在Phoenix建立同名表,分别使用HBase和Phoenix向表中插入数据,并查看是否正常。

HBase建表

-- HBase建表
create 'TEST','INFO'

-- 插入数据
put 'TEST', 'ROW001','INFO:NUM','1000'
put 'TEST', 'ROW002','INFO:NUM','10000.000000'

-- 查看数据
scan 'TEST'

注意:表名、字段均为大写。

Phoenix建表

-- Phoenix建表
create table TEST(
    "ROW" varchar  primary key, 
    "INFO"."NUM" DECIMAL
);

-- 插入数据
UPSERT INTO TEST("ROW","INFO"."NUM") VALUES ('123', 200000000);

-- 查看数据
select * from TEST;

注意:表名、字段均为大写。

测试查询

HBase可以查询到Phoenix插入的数据,但是由于Phoenix建表的时候 INFO:NUM 字段采用的 DECIMAL 类型,Phoenix端插入的数据在HBase查询到是乱码。

hbase:005:0> scan 'TEST'
ROW                                        COLUMN+CELL                                                                                                               
 123                                       column=INFO:NUM, timestamp=2022-06-07T14:11:35.713, value=\xC5\x03                                                        
 123                                       column=INFO:_0, timestamp=2022-06-07T14:11:35.713, value=x                                                                
 ROW001                                    column=INFO:NUM, timestamp=2022-06-07T14:06:11.539, value=1000                                                            
 ROW001                                    column=INFO:_0, timestamp=2022-06-07T14:06:11.539, value=                                                                 
 ROW002                                    column=INFO:NUM, timestamp=2022-06-07T14:06:13.490, value=10000.000000                                                    
 ROW002                                    column=INFO:_0, timestamp=2022-06-07T14:06:13.490, value=                                                                 
3 row(s)
Took 0.0168 seconds                                                                                                                                                  
hbase:006:0>

Phoenix可以查询到HBase插入的数据,但是但是由于Phoenix建表的时候 INFO:NUM 字段采用的 DECIMAL 类型,HBase端插入的数据在Phoenix端查询是科学计数法,并且数据精度异常。

0: jdbc:phoenix:> select * from TEST;
+--------+------------------------------+
|  ROW   |             NUM              |
+--------+------------------------------+
| 123    | 2E+8                         |
| ROW001 | -5.35353E+27                 |
| ROW002 | -5.353535355535353535353E+27 |
+--------+------------------------------+
3 rows selected (0.022 seconds)

最终结论

Phoenix对除Varchar类型外的其它类型支持都有点问题,DECIMAL 类型存储数据会出现科学计数法的现象。如果想让HBase和Phoenix的数据完全相同,可以将Phoenix的数据类型都改成Varchar类型,这样插入的数据就不会发生变化。

 

posted on 2022-06-08 14:08  吹静静  阅读(544)  评论(0编辑  收藏  举报