Phoenix Mapping HBase

《Phoenix Mapping HBase》 enter description here

Phoenix 简单使用

create table server_metrics(
    host varchar not null
    ,date date not null
    ,response_time integer
    ,gc_time integer
    ,cpu_time integer
    ,io_time integer,
    
    CONSTRAINT constraintName PRIMARY KEY (host,date)
)

select * from server_metrics;

upsert into server_metrics values('192.168.137.121','2017-06-22 17:33:55',10,1,1,1);
upsert into server_metrics values('192.168.137.122','2017-06-22 17:33:56',1,1,1,1);

How I map Phoenix table to an existing HBase table?

简单结构

  create 'test1','i'
  put 'test1','1','i:name','zhangsan'
  put 'test1','2','i:name','lisi'
  put 'test1','1','i:age','15'
  put 'test1','2','i:age','2'

创建test1 视图对应与hbase中的test1

注意视图名称、类簇名称、qualify名称都要用双引号扩起来否则会默认创建成大写,与原表才能对应。也可以创建表,这样的话执行drop table 操作后hbase中的表数据就被全部清空了;

  create  view "test1"(
    pk VARCHAR PRIMARY KEY
    ,"i"."name" varchar
    ,"i"."age" varchar
)

《Phoenix Mapping HBase》 enter description here
《Phoenix Mapping HBase》 enter description here

复杂结构

hbase(main):014:0> create 'test','i','j'

hbase(main):014:0> put 'test','1','i:name','zhangsan'
hbase(main):014:0> put 'test','2','i:name','lisi'
hbase(main):014:0> put 'test','1','j:name','wangwu'
hbase(main):014:0> put 'test','2','j:name','zhaoliu'

hbase(main):014:0> put 'test','1','i:age',15
hbase(main):014:0> put 'test','2','i:age',20
hbase(main):014:0> put 'test','1','j:age',23
hbase(main):014:0> put 'test','2','j:age',28
create  table "test"(
    pk VARCHAR PRIMARY KEY
    ,"i"."name" varchar
    ,"i"."age" integer
    ,"j"."name" varchar
    ,"j"."age" integer
)

《Phoenix Mapping HBase》 enter description here

可以看出发现了两个问题,

  • 数据参数age导入异常
  • 不同类簇下存在同样的qualify 会导致异常

数据异常是由于在hbase shell 中无论加不加单引号,数据默认都是使用的string类型存放,
在使用hbase api 导入数据时使用Bytes.toBytes(int) 接口写入的数据才是真正的整形,而且映射关系的时候貌似前面都要使用无符号的对应类型,这点比较怪异。
具体可见Hbase and Phoenix can’t able to map integers

对于第二个问题,目前貌似还没有很好的解决方案,其根本原因还是SQLNOSQL的不同设计,在hbase 数据库设计的不是十分复杂的情况下,该问题很好解决(一个hbase表表一个列簇,刚好对应SQL中的一张表),但是当hbase数据库的类簇,qualify设计的很复杂时,目前只能先抽取一张表中的数据创建成视图,想办法多创建几个视图把不同维度表拿出来

-- 创建视图 用以统计医院相关数据,该数据由智能导诊项目调出
create  view "aidoctor"(
    pk VARCHAR PRIMARY KEY
     ,"hos"."havgcost"           UNSIGNED_DOUBLE
     ,"hos"."havgday"            UNSIGNED_DOUBLE
     ,"hos"."havgfinproportion"  UNSIGNED_DOUBLE
     ,"hos"."havgreimburse"      UNSIGNED_DOUBLE
     ,"hos"."havgreproportion"   UNSIGNED_DOUBLE
     ,"hos"."hcount"             UNSIGNED_DOUBLE
     ,"hos"."oavgcost"           UNSIGNED_DOUBLE
     ,"hos"."oavgfinproportion"  UNSIGNED_DOUBLE
     ,"hos"."oavgreimburse"      UNSIGNED_DOUBLE
     ,"hos"."oavgreproportion"   UNSIGNED_DOUBLE
     ,"hos"."ocount"             UNSIGNED_DOUBLE
)

select * from "aidoctor"
order by "havgcost" asc limit 10

《Phoenix Mapping HBase》 enter description here

相关链接

How I map Phoenix table to an existing HBase table?

    原文作者:天堂宝宝_V
    原文地址: https://www.jianshu.com/p/cf9df581e3fb
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞