• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Phoenix 对 Hbase 表的映射

武飞扬头像
夏殿灬青葛石
帮助7

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
系列文章
更多 icon
同类精品
更多 icon
继续加载