目录
1.前提环境
- CDH环境搭建完毕
- APACHE PHOENIX集成完毕
- 可以通过phoenix连接到HBase数据库
2.视图映射操作步骤
- phoenix要映射HBase表,尤其是携带“命名空间”的HBase表(命名空间可以理解为数据库),在CDH中需要进行HBase配置“命名空间开启”
<property> <name>phoenix.schema.isNamespaceMappingEnabled</name> <value>true</value> </property> <property> <name>phoenix.schema.mapSystemTablesToNamespace</name> <value>true</value> </property>
- 我们打开CDH中的HBase模块的配置,在配置中分别找到hbase-site.xml的服务端和客户端配置代码块,并分别添加上述配置代码
- 配置完毕之后,重启HBase服务使其生效(注意:我自己搭建的测试用集群存在一些问题,导致agent时断时续,导致parcels时激活时未激活,这种情况下,使用滚动重启“方式经常会导致命令超时,所以推荐始终”重启“命令)
- 重启完成后,使用命令操作phoenix连接zk(注意:phoenix中的默认单词都是大写格式,如果要定义为小写名称,请使用双引号引起来,如下,我们创建小写名称的schema:test)
#/opt/cloudera/parcels/APACHE_PHOENIX/bin/phoenix-sqlline.py cm:2181 ... ... ... >create schema "test"; >use "test";
- 成功连接后,我们创建映射视图(表需先已存在hbase中且该如果使用rowkey则需要定义为primary key,所有字段需用引号引起来,列还需要带上列簇信息,否则均会报错出现Table Is Readonly的错误,可以理解为这个错误实际是你创建的视图和源表无法匹配)
>create view "test"."aaa"( >"pk" varchar primary key, >"info"."name" varchar, >"info"."age" varchar);
- 这里需要说明下phoenix的命名空间是以“.”来表示的,而HBase是以“:”来表示的需要注意一下,HBase那边别写错了
- 创建成功后,使用!table及select * from "test"."aaa"查看即可
- 如上,不存在的字段会自动为null
- 删除视图并不会影响HBase原表