Phoenix操作Hbase数据的时候有两种方式,也可以称作是两种映射,分别是视图和表
区别就在于,视图是专门用来让hbase的表可以在phoenix中可见,但是它只可以做查询,不可以做其他的事情,视图创建前,hbase中一定要有这个视图对应的表,且被删除之后只是映射消失表不可见了而已,而hbase中的表不会消失,创建视图的语句如下
create view test(
“Id” varchar,
“name”.”first” varchar
);
创建视图的时候视图名字要和Hbase里面的表名一致
而表不同与视图映射,它可以直接在phoenix中创建,如果hbase有这个表,就会自动映射,没有则会自动在hbase中创建这个表,表映射可以做所有的表操作,同时phoenix一旦删除这个表,hbase中的对应表也将删除,但是反过来hbase中删除被映射的表,phoenix中的映射表还在,不过这个映射在使用的时候会出问题
且表映射时要有一个注意点,如果映射的是hbase中的已有表那么必须在建立表映射的时候指定字符集,因为两个软件之间的编码不同,而不是已有表则不需要,但是为了安全起见我们都加上字符集的指定,因此语句为:
create table test(
“id” varchar,
“name”.”first” varchar
)column_encoded_bytes=0;
我们还要注意,无论是表映射还是视图映射,想要映射那个两个软件之间的表名、列族名、列名等,必须一致,且严格来说phoenix中的表映射就是我们常规操作的表,只是它的作用不一样而已,因此不要在phoenix是否可以单独建立表这一问题上纠结,且在上面的语句中我没有写如何指定主键,是因为phoenix中主键可以有多个,我们可以在某一个列名后添加primary key关键字,还可以在建立语句的小括号中的最后一行指定所有的主键,这和mysql差不多
constraint 主键别名 primary key(所有主键用逗号隔开)
而且表映射操作中,还有一个比较有意思的事,前面我的建表语句中,表名都没有用英文双引号包裹,这样的表创建出来之后,大家查询所有表,就会发现表名在我建立时表名写的是小写,但是展示的是大写的,这就是phoenix的一个有意思的地方,而像我这样没有把表名用英文的双引号包裹的,在后期操作的时候也不要用英文双引号包裹,其实区别在于包裹之后,再展示所有表,你会发现表名就和我们写的是同步的,建立时用小写那就是小写,大写就是大写,反之如用了双引号后期操作时就要包裹,总之遵循怎么定义的就怎么操作原则