Phoenix 对 Hbase 表的映射
1)表的关系
默认情况下, HBase 中已存在的表,通过 Phoenix 是不可见的。
如果要在 Phoenix 中操作 HBase 中已存在的表,可以在 Phoenix 中进行表的映射。
映射方式有两种:视图映射和表映射。
2)Hbase中创建表 test
启动 HBase Shell【首先确保hadoop、zk、hbase集群已经启动 】
bin/hbase shell
创建 HBase 表 test
create 'test','info1','info2'
3)视图映射
Phoenix 创建的视图是只读的,所以只能用来做查询,无法通过视图对数据进行修改等操作。
开启phoenix
/opt/module/phoenix/bin/sqlline.py hadoop100,hadoop101,hadoop102:2181
在 phoenix 中创建关联 test 表的视图
删除视图
drop view "test";
4)表映射
在 Pheonix 创建表去映射 HBase 中已经存在的表,是可以修改删除 HBase 中已经存在
的数据的。而且,删除 Phoenix 中的表,那么 HBase 中被映射的表也会被删除。
注:进行表映射时,不能使用列名编码,需将 column_encoded_bytes 设为 0。
数字类型说明
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演示
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 自定义函数,将数字类型的最高位,即
符号位反转即可,
自定义函数可参考如下链接:https://phoenix.apache.org/udf.html
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfcichf
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13