Phoenix与hbase的表映射

文章目录

    • 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);
Phoenix与hbase的表映射_第1张图片

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

然后我在Hbase加入一条数据:
Phoenix与hbase的表映射_第2张图片
能在Phoenix查到
Phoenix与hbase的表映射_第3张图片
删除视图 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表映射添加的数据会有多余的空行
Phoenix与hbase的表映射_第4张图片
这一行看似没用,其实是为了提升查询效率

总结:

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

相比之下

  • 使用create table创建的关联表,如果对表进行了修改,源数据也会改变,同时如果关联表被删除,源表也会被删除。

你可能感兴趣的:(大数据其他)