Phoenix 对 Hbase 中表的映射

目录

    • 1)表的关系
    • 2)Hbase中创建表 test
    • 3)视图映射
    • 4)表映射
    • 数字类型说明

1)表的关系

默认情况下, HBase 中已存在的表,通过 Phoenix 是不可见的。
如果要在 Phoenix 中操作 HBase 中已存在的表,可以在 Phoenix 中进行表的映射。
映射方式有两种:视图映射和表映射。

2)Hbase中创建表 test

启动 HBase Shell【首先确保hadoop、zk、hbase集群已经启动 】

bin/hbase shell

Phoenix 对 Hbase 中表的映射_第1张图片

创建 HBase 表 test

create 'test','info1','info2'

3)视图映射

Phoenix 创建的视图是只读的,所以只能用来做查询,无法通过视图对数据进行修改等操作。

开启phoenix

/opt/module/phoenix/bin/sqlline.py hadoop100,hadoop101,hadoop102:2181

Phoenix 对 Hbase 中表的映射_第2张图片

在 phoenix 中创建关联 test 表的视图
Phoenix 对 Hbase 中表的映射_第3张图片

删除视图

drop view "test";

Phoenix 对 Hbase 中表的映射_第4张图片

4)表映射

在 Pheonix 创建表去映射 HBase 中已经存在的表,是可以修改删除 HBase 中已经存在
的数据的。而且,删除 Phoenix 中的表,那么 HBase 中被映射的表也会被删除。

注:进行表映射时,不能使用列名编码,需将 column_encoded_bytes 设为 0。
Phoenix 对 Hbase 中表的映射_第5张图片

数字类型说明

HBase 中的数字,底层存储为补码,而 Phoenix 中的数字,底层存储为在补码的基础上,
将符号位反转。
故当在 Phoenix 中建表去映射 HBase 中已存在的表,当 HBase 中有数字类型的字段时,
会出现解析错误的现象。

Hbase演示:

create 'test_number','info'
put 'test_number','1001','info:number',Bytes.toBytes(1000)
scan 'test_number',{COLUMNS => 'info:number:toLong'}

Phoenix 对 Hbase 中表的映射_第6张图片
Phoenix 对 Hbase 中表的映射_第7张图片
phoenix演示

create view "test_number"(id varchar primary key,"info"."number" bigint);
select * from "test_number";
drop view "test_number";

解决上述问题的方案有以下两种:
(1)Phoenix 种提供了 unsigned_int,unsigned_long 等无符号类型,其对数字的编码解
码方式和 HBase 是相同的,如果无需考虑负数,那在 Phoenix 中建表时采用无符号类型是
最合适的选择。

create view "test_number"(id varchar primary key,"info"."number" unsigned_long);
select * from "test_number";

Phoenix 对 Hbase 中表的映射_第8张图片

如需考虑负数的情况,则可通过 Phoenix 自定义函数,将数字类型的最高位,即
符号位反转即可,
自定义函数可参考如下链接:https://phoenix.apache.org/udf.html

你可能感兴趣的:(phoenix,hbase,大数据,hadoop)