Phoenix与hbase的表映射

phoenix映射HBase

默认情况下,直接在hbase中创建的表,通过phoenix是查看不到的。
如果要在phoenix中操作由hbase创建的表,则需要在phoenix中进行表的映射。
映射方式有两种:

视图映射和表映射

为了测试,我们先在Hbase中创建表test
test有两个列簇name、company.

视图映射

Phoenix创建的视图是【只读】的,所以只能用来做查询,无法通过视图对源数据进行修改等操作。
在phoenix中创建视图test表
0: jdbc::phoenix:mini1,mini2,mini3:2181> create view “test”(empid varchar primary key,“name”.“firstname” varchar,“name”.“lastname” varchar,“company”.“name” varchar,“company”.“address” varchar);
在这里插入图片描述

当我想在这个视图插入数据时报错了:Table is read only
在这里插入图片描述

然后我在Hbase加入一条数据:
在这里插入图片描述
能在Phoenix查到
在这里插入图片描述
删除视图 drop view “test”;

表映射

使用Apache Phoenix创建对HBase的表映射,有两种方法:
1) 当HBase中已经存在表时,可以以类似创建视图的方式创建关联表,只需要将create view改为create table即可。

create table "test"(empid varchar primary key,"name"."firstname" varchar,
"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar);

2) 当HBase中不存在表时,可以直接使用create table指令创建需要的表,系统将会自动在Phoenix和HBase中创建person_infomation的表,并会根据指令内的参数对表结构进行初始化。

create table "person_infomation"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,
"company"."name" varchar,"company"."address" varchar) column_encoded_bytes=0;

这时候通过Phoenix就能进行新增和修改操作了
在这里插入图片描述

这里对视图和表进行一个比较发现
在这里插入图片描述
通过Phoenix表映射添加的数据会有多余的空行
在这里插入图片描述
这一行看似没用,其实是为了提升查询效率

总结:

  • 视图只读,不支持新增和修改
  • 如果删除视图,源数据不会发生改变
  • 视图的查询效率较低(原因是:表映射会在表中创建一些空的键值对,这些空键值对的存在可以用来提高查询效率,而视图映射没有)

相比之下

  • 使用create table创建的关联表,如果对表进行了修改,源数据也会改变,同时如果关联表被删除,源表也会被删除。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值