Phoenix映射HBase表
默认情况下,HBase中已存在的表,通过Phoenix是不可见的。如果要在Phoenix中操作HBase中已存在的表,可以在Phoenix中进行表的映射。映射方式有两种:视图映射和表映射。
1. 开启namespace映射
在phoenix中与hbase的命名空间相对应的是schema概念,默认是没有开启的,需要在hbase的hbase-site.xml中增加以下配置项:
xml
<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property>
<property>
<name>phoenix.schema.mapSystemTablesToNamespace</name>
<value>true</value>
</property>
然后将hbase-site.xml变动同步到hbase集群各个节点上,重启hbase集群:
sh
[jack@hadoop102 conf]$ xsync hbase-site.xml
total size is 1,720 speedup is 1.44
[jack@hadoop102 conf]$ sh ../bin/start-hbase.sh
running master, logging to /opt/module/hbase-2.6.1/logs/hbase-jack-master-hadoop102.out
hadoop104: running regionserver, logging to /opt/module/hbase-2.6.1/logs/hbase-jack-regionserver-hadoop104.out
hadoop103: running regionserver, logging to /opt/module/hbase-2.6.1/logs/hbase-jack-regionserver-hadoop103.out
hadoop102: running regionserver, logging to /opt/module/hbase-2.6.1/logs/hbase-jack-regionserver-hadoop102.out
hadoop103: running master, logging to /opt/module/hbase-2.6.1/logs/hbase-jack-master-hadoop103.out
2. 视图映射
Phoenix创建的视图是只读的,所以只能用来做查询,无法通过视图对数据进行修改等操作。在phoenix中创建关联 bigdata:user表的视图:
sh
## 在hbase shell中查看user表信息
hbase:006:0> scan 'bigdata:user'
ROW COLUMN+CELL
1001 column=info:age, timestamp=2024-11-28T13:28:56.232, value=33
1001 column=info:name, timestamp=2024-11-28T12:39:05.562, value=\xE5\xBC\xA0\xE4\xB8\x893
1 row(s)
Took 0.1300 seconds
## 在phoenix shell中创建视图
## 首先创建schema, 注意在hbase中是小写
0: jdbc:phoenix:> create schema "bigdata";
No rows affected (0.021 seconds)
0: jdbc:phoenix:> !schema
+-------------+---------------+
| TABLE_SCHEM | TABLE_CATALOG |
+-------------+---------------+
| SYSTEM | |
| bigdata | |
+-------------+---------------+
## 注意user也是小写,需要使用"
sqlline version 1.9.0
0: jdbc:phoenix:> create view "bigdata"."user"(
. . . . . . . .)> "ROW" varchar primary key,
. . . . . . . .)> "info"."name" varchar,
. . . . . . . .)> "info"."age" varchar
. . . . . . . .)> );
No rows affected (6.182 seconds)
0: jdbc:phoenix:> select * from "bigdata"."user";
+------+------+-----+
| ROW | name | age |
+------+------+-----+
| 1001 | 张三3 | 33 |
| 1002 | test | 22 |
+------+------+-----+
2 rows selected (0.061 seconds)
3. 表映射
在Pheonix创建表去映射HBase中已经存在的表,是可以修改删除HBase中已经存在的数据的。而且删除Phoenix中的表,那么HBase中被映射的表也会被删除。
sh
0: jdbc:phoenix:> create table "bigdata"."user"(
. . . . . . . .)> "id" bigint primary key,
. . . . . . . .)> "info"."name" varchar,
. . . . . . . .)> "info"."age" varchar
. . . . . . . .)> ) column_encoded_bytes=0;
No rows affected (6.016 seconds)
0: jdbc:phoenix:> select * from "bigdata"."user";
+------+------+-----+
| id | name | age |
+------+------+-----+
| null | jack | 34 |
| null | 张三 | 18 |
+------+------+-----+
2 rows selected (0.044 seconds)
提示
进行表映射时,不能使用列名编码,需将column_encoded_bytes
设为0