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
)
复杂结构
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
)
可以看出发现了两个问题,
- 数据参数age导入异常
- 不同类簇下存在同样的qualify 会导致异常
数据异常是由于在hbase shell
中无论加不加单引号,数据默认都是使用的string类型存放,
在使用hbase api
导入数据时使用Bytes.toBytes(int)
接口写入的数据才是真正的整形,而且映射关系的时候貌似前面都要使用无符号的对应类型,这点比较怪异。
具体可见Hbase and Phoenix can't able to map integers
对于第二个问题,目前貌似还没有很好的解决方案,其根本原因还是SQL
与 NOSQL
的不同设计,在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
相关链接
How I map Phoenix table to an existing HBase table?