一、说明
phoenix虽然可以使用sql对hbase进行很方便的查询,但时在使用中会存在这样的一个问题:经过hbase创建的表在phoenix中却查不出来,phoenix默认却只能显示phoenix自己创建的表。如果要在phoenix中也查询并操作hbase创建的表及加入数据就需要在phoenix中映射hbase的表;
二、创建测试表
1、在hbase创建一个测试表user_phoenix
hbase(main):023:0> create 'user_phoenix','info'
0 row(s) in 2.3760 seconds
=> Hbase::Table - user_phoenix
hbase(main):024:0>
=> Hbase::Table - user_phoenix
hbase(main):024:0> list
TABLE
STU
STUDENT
STUDENT01
STU_AGE
STU_AGE_02
STU_AGE_03
SYSTEM.CATALOG
SYSTEM.FUNCTION
SYSTEM.MUTEX
SYSTEM.SEQUENCE
SYSTEM.STATS
location_sure
location_sure0
student01
test
test00
test01
test02
test03
userWalkInfo
user_phoenix
21 row(s) in 0.0070 seconds
=> ["STU", "STUDENT", "STUDENT01", "STU_AGE", "STU_AGE_02", "STU_AGE_03", "SYSTEM.CATALOG", "SYSTEM.FUNCTION", "SYSTEM.MUTEX", "SYSTEM.SEQUENCE", "SYSTEM.STATS", "location_sure", "location_sure0", "student01", "test", "test00", "test01", "test02", "test03", "userWalkInfo", "user_phoenix"]
2、加一条测试数据
hbase(main):028:0> put 'user_phoenix' ,'rk001' ,'info:name','xiaoming'
0 row(s) in 0.1320 seconds
hbase(main):029:0> put 'user_phoenix' ,'rk001' ,'info:age','20'
0 row(s) in 0.0160 seconds
hbase(main):030:0> scan 'user_phoenix'
ROW COLUMN+CELL
rk001 column=info:age, timestamp=1592967133685, value=20
rk001 column=info:name, timestamp=1592967121856, value=xiaoming
1 row(s) in 0.0170 seconds
hbase(main):031:0>
3、在pnoenix中查看是否存在这个表
结果显示,却不存在!
三、创建phoenix视图映射Hbase表
0: jdbc:phoenix:master,slaves1,slaves2:2181> create view "user_phoenix"("rwk" varchar primary key,"info"."name" varchar,"info"."age" varchar);
No rows affected (6.477 seconds)
0: jdbc:phoenix:master,slaves1,slaves2:2181> !tables
+------------+--------------+----------------+---------------+----------+------------+----------------------------+-----------------+-+
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | TYPE_NAME | SELF_REFERENCING_COL_NAME | REF_GENERATION | |
+------------+--------------+----------------+---------------+----------+------------+----------------------------+-----------------+-+
| | | STU_ADD | INDEX | | | | | |
| | | STU_AGE | INDEX | | | | | |
| | | STU_AGE_02 | INDEX | | | | | |
| | | STU_AGE_03 | INDEX | | | | | |
| | SYSTEM | CATALOG | SYSTEM TABLE | | | | | |
| | SYSTEM | FUNCTION | SYSTEM TABLE | | | | | |
| | SYSTEM | SEQUENCE | SYSTEM TABLE | | | | | |
| | SYSTEM | STATS | SYSTEM TABLE | | | | | |
| | | STU | TABLE | | | | | |
| | | STUDENT | TABLE | | | | | |
| | | STUDENT01 | TABLE | | | | | |
| | | student01 | TABLE | | | | | |
| | | location_sure | VIEW | | | | | |
| | | user_phoenix | VIEW | | | | | |
+------------+--------------+----------------+---------------+----------+------------+----------------------------+-----------------+-+
0: jdbc:phoenix:master,slaves1,slaves2:2181> select * from "user_phoenix";
+--------+-----------+------+
| rwk | name | age |
+--------+-----------+------+
| rk001 | xiaoming | 20 |
+--------+-----------+------+
1 row selected (0.113 seconds)
0: jdbc:phoenix:master,slaves1,slaves2:2181>
1、视图名称需要和hbase表名称一致,要养成为表名和列簇、列名加双引号的习惯,因为在phoenix中如果不加双引号默认都转化为大写,极容易造成和hbase不一致的情况;
2、映射hbase中已有的表为phoenix的视图,在这个模式下,通过phoenix可以以SQL的形式只读hbase的表。删除视图后,hbase的表仍存在。视图名称需要和hbase表名称一致。
3、由于是只读,在phoenix中删除则报错
0: jdbc:phoenix:master,slaves1,slaves2:2181> delete from "user_phoenix";
Error: ERROR 505 (42000): Table is read only. (state=42000,code=505)
org.apache.phoenix.schema.ReadOnlyTableException: ERROR 505 (42000): Table is read only.
at org.apache.phoenix.compile.DeleteCompiler.compile(DeleteCompiler.java:397)
''''
4、删除视图后,hbase的表仍存在
0: jdbc:phoenix:master,slaves1,slaves2:2181> drop view "user_phoenix";
No rows affected (0.039 seconds)
0: jdbc:phoenix:master,slaves1,slaves2:2181> !tables
+------------+--------------+----------------+---------------+----------+------------+----------------------------+-----------------+-+
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | TYPE_NAME | SELF_REFERENCING_COL_NAME | REF_GENERATION | |
+------------+--------------+----------------+---------------+----------+------------+----------------------------+-----------------+-+
| | | STU_ADD | INDEX | | | | | |
| | | STU_AGE | INDEX | | | | | |
| | | STU_AGE_02 | INDEX | | | | | |
| | | STU_AGE_03 | INDEX | | | | | |
| | SYSTEM | CATALOG | SYSTEM TABLE | | | | | |
| | SYSTEM | FUNCTION | SYSTEM TABLE | | | | | |
| | SYSTEM | SEQUENCE | SYSTEM TABLE | | | | | |
| | SYSTEM | STATS | SYSTEM TABLE | | | | | |
| | | STU | TABLE | | | | | |
| | | STUDENT | TABLE | | | | | |
| | | STUDENT01 | TABLE | | | | | |
| | | student01 | TABLE | | | | | |
| | | location_sure | VIEW | | | | | |
+------------+--------------+----------------+---------------+----------+------------+----------------------------+-----------------+-+
hbase(main):031:0> list
TABLE
STU
STUDENT
STUDENT01
STU_AGE
STU_AGE_02
STU_AGE_03
SYSTEM.CATALOG
SYSTEM.FUNCTION
SYSTEM.MUTEX
SYSTEM.SEQUENCE
SYSTEM.STATS
location_sure
location_sure0
student01
test
test00
test01
test02
test03
userWalkInfo
user_phoenix
21 row(s) in 0.0170 seconds
=> ["STU", "STUDENT", "STUDENT01", "STU_AGE", "STU_AGE_02", "STU_AGE_03", "SYSTEM.CATALOG", "SYSTEM.FUNCTION", "SYSTEM.MUTEX", "SYSTEM.SEQUENCE", "SYSTEM.STATS", "location_sure", "location_sure0", "student01", "test", "test00", "test01", "test02", "test03", "userWalkInfo", "user_phoenix"]
四、创建phoenix表映射Hbase已有的表
映射hbase中已有的表为phoenix的表,在这个模式下,通过phoenix可以以SQL的形式对hbase表进行DDL和DML的操作,删除phoenix表后,hbase里对应的表也会被删除。
hbase:
hbase(main):032:0> create 'user_phoenix01','info'
0 row(s) in 2.2760 seconds
=> Hbase::Table - user_phoenix01
hbase(main):036:0> put 'user_phoenix01' ,'rk001' ,'info:name','xiaoming'
0 row(s) in 0.0160 seconds
hbase(main):037:0> put 'user_phoenix01' ,'rk001' ,'info:age','25'
0 row(s) in 0.0060 seconds
hbase(main):038:0> scan 'user_phoenix01'
ROW COLUMN+CELL
rk001 column=info:age, timestamp=1592969230094, value=25
rk001 column=info:name, timestamp=1592969188995, value=xiaoming
1 row(s) in 0.0170 seconds
phoenix:
0: jdbc:phoenix:master,slaves1,slaves2:2181> create table "user_phoenix01"("rk" varchar primary key,"info"."name" varchar,"info"."age" varchar);
1 row affected (6.534 seconds)
0: jdbc:phoenix:master,slaves1,slaves2:2181> !tables
+------------+--------------+-----------------+---------------+----------+------------+----------------------------+------------------+
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | TYPE_NAME | SELF_REFERENCING_COL_NAME | REF_GENERATION |
+------------+--------------+-----------------+---------------+----------+------------+----------------------------+------------------+
| | | STU_ADD | INDEX | | | | |
| | | STU_AGE | INDEX | | | | |
| | | STU_AGE_02 | INDEX | | | | |
| | | STU_AGE_03 | INDEX | | | | |
| | SYSTEM | CATALOG | SYSTEM TABLE | | | | |
| | SYSTEM | FUNCTION | SYSTEM TABLE | | | | |
| | SYSTEM | SEQUENCE | SYSTEM TABLE | | | | |
| | SYSTEM | STATS | SYSTEM TABLE | | | | |
| | | STU | TABLE | | | | |
| | | STUDENT | TABLE | | | | |
| | | STUDENT01 | TABLE | | | | |
| | | student01 | TABLE | | | | |
| | | user_phoenix | TABLE | | | | |
| | | user_phoenix01 | TABLE | | | | |
| | | location_sure | VIEW | | | | |
+------------+--------------+-----------------+---------------+----------+------------+----------------------------+------------------+
0: jdbc:phoenix:master,slaves1,slaves2:2181> select * from "user_phoenix01";
+--------+-----------+------+
| rk | name | age |
+--------+-----------+------+
| rk001 | xiaoming | 25 |
+--------+-----------+------+
1 row selected (0.035 seconds)
1、phoenix中删除数据
phoenix:
0: jdbc:phoenix:master,slaves1,slaves2:2181> delete from "user_phoenix01";
1 row affected (0.031 seconds)
0: jdbc:phoenix:master,slaves1,slaves2:2181> select * from "user_phoenix01";
+-----+-------+------+
| rk | name | age |
+-----+-------+------+
+-----+-------+------+
No rows selected (0.038 seconds)
hbase:
hbase(main):039:0> scan 'user_phoenix01'
ROW COLUMN+CELL
0 row(s) in 0.0250 seconds
2、phoenix中删除表
phoenix
0: jdbc:phoenix:master,slaves1,slaves2:2181> drop table "user_phoenix01"
. . . . . . . . . . . . . . . . . . . . . .> ;
No rows affected (4.093 seconds)
0: jdbc:phoenix:master,slaves1,slaves2:2181> !tables
+------------+--------------+----------------+---------------+----------+------------+----------------------------+-----------------+-+
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | TYPE_NAME | SELF_REFERENCING_COL_NAME | REF_GENERATION | |
+------------+--------------+----------------+---------------+----------+------------+----------------------------+-----------------+-+
| | | STU_ADD | INDEX | | | | | |
| | | STU_AGE | INDEX | | | | | |
| | | STU_AGE_02 | INDEX | | | | | |
| | | STU_AGE_03 | INDEX | | | | | |
| | SYSTEM | CATALOG | SYSTEM TABLE | | | | | |
| | SYSTEM | FUNCTION | SYSTEM TABLE | | | | | |
| | SYSTEM | SEQUENCE | SYSTEM TABLE | | | | | |
| | SYSTEM | STATS | SYSTEM TABLE | | | | | |
| | | STU | TABLE | | | | | |
| | | STUDENT | TABLE | | | | | |
| | | STUDENT01 | TABLE | | | | | |
| | | student01 | TABLE | | | | | |
| | | user_phoenix | TABLE | | | | | |
| | | location_sure | VIEW | | | | | |
+------------+--------------+----------------+---------------+----------+------------+----------------------------+-----------------+-+
0: jdbc:phoenix:master,slaves1,slaves2:2181>
hbase:
hbase(main):040:0> list
TABLE
STU
STUDENT
STUDENT01
STU_AGE
STU_AGE_02
STU_AGE_03
SYSTEM.CATALOG
SYSTEM.FUNCTION
SYSTEM.MUTEX
SYSTEM.SEQUENCE
SYSTEM.STATS
location_sure
location_sure0
student01
test
test00
test01
test02
test03
userWalkInfo
user_phoenix
21 row(s) in 0.0090 seconds
=> ["STU", "STUDENT", "STUDENT01", "STU_AGE", "STU_AGE_02", "STU_AGE_03", "SYSTEM.CATALOG", "SYSTEM.FUNCTION", "SYSTEM.MUTEX", "SYSTEM.SEQUENCE", "SYSTEM.STATS", "location_sure", "location_sure0", "student01", "test", "test00", "test01", "test02", "test03", "userWalkInfo", "user_phoenix"]
五、创建phoenix表
创建在hbase中不存在的phoenix的表,会自动在hbase中创建一个同名hbase表,此时可以对该hbase表做DML和DDL操作,且删除phoenix表之后,hbase的表也会被删除。
phoenix:
0: jdbc:phoenix:master,slaves1,slaves2:2181> create table "user_phoenix03"("rk" varchar primary key,"info"."name" varchar,"info"."age" varchar);
No rows affected (1.368 seconds)
0: jdbc:phoenix:master,slaves1,slaves2:2181> !tables
+------------+--------------+-----------------+---------------+----------+------------+----------------------------+------------------+
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | TYPE_NAME | SELF_REFERENCING_COL_NAME | REF_GENERATION |
+------------+--------------+-----------------+---------------+----------+------------+----------------------------+------------------+
| | | STU_ADD | INDEX | | | | |
| | | STU_AGE | INDEX | | | | |
| | | STU_AGE_02 | INDEX | | | | |
| | | STU_AGE_03 | INDEX | | | | |
| | SYSTEM | CATALOG | SYSTEM TABLE | | | | |
| | SYSTEM | FUNCTION | SYSTEM TABLE | | | | |
| | SYSTEM | SEQUENCE | SYSTEM TABLE | | | | |
| | SYSTEM | STATS | SYSTEM TABLE | | | | |
| | | STU | TABLE | | | | |
| | | STUDENT | TABLE | | | | |
| | | STUDENT01 | TABLE | | | | |
| | | student01 | TABLE | | | | |
| | | user_phoenix | TABLE | | | | |
| | | user_phoenix03 | TABLE | | | | |
| | | location_sure | VIEW | | | | |
+------------+--------------+-----------------+---------------+----------+------------+----------------------------+------------------+
0: jdbc:phoenix:master,slaves1,slaves2:2181>
Hbase:
hbase(main):048:0> list
TABLE
STU
STUDENT
STUDENT01
STU_AGE
STU_AGE_02
STU_AGE_03
SYSTEM.CATALOG
SYSTEM.FUNCTION
SYSTEM.MUTEX
SYSTEM.SEQUENCE
SYSTEM.STATS
location_sure
location_sure0
student01
test
test00
test01
test02
test03
userWalkInfo
user_phoenix
user_phoenix03
22 row(s) in 0.0180 seconds
=> ["STU", "STUDENT", "STUDENT01", "STU_AGE", "STU_AGE_02", "STU_AGE_03", "SYSTEM.CATALOG", "SYSTEM.FUNCTION", "SYSTEM.MUTEX", "SYSTEM.SEQUENCE", "SYSTEM.STATS", "location_sure", "location_sure0", "student01", "test", "test00", "test01", "test02", "test03", "userWalkInfo", "user_phoenix", "user_phoenix03"]
1、phoenix删除此表
0: jdbc:phoenix:master,slaves1,slaves2:2181> drop table "user_phoenix03"
. . . . . . . . . . . . . . . . . . . . . .> ;
No rows affected (3.618 seconds)
0: jdbc:phoenix:master,slaves1,slaves2:2181> !tables
+------------+--------------+----------------+---------------+----------+------------+----------------------------+-----------------+-+
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | TYPE_NAME | SELF_REFERENCING_COL_NAME | REF_GENERATION | |
+------------+--------------+----------------+---------------+----------+------------+----------------------------+-----------------+-+
| | | STU_ADD | INDEX | | | | | |
| | | STU_AGE | INDEX | | | | | |
| | | STU_AGE_02 | INDEX | | | | | |
| | | STU_AGE_03 | INDEX | | | | | |
| | SYSTEM | CATALOG | SYSTEM TABLE | | | | | |
| | SYSTEM | FUNCTION | SYSTEM TABLE | | | | | |
| | SYSTEM | SEQUENCE | SYSTEM TABLE | | | | | |
| | SYSTEM | STATS | SYSTEM TABLE | | | | | |
| | | STU | TABLE | | | | | |
| | | STUDENT | TABLE | | | | | |
| | | STUDENT01 | TABLE | | | | | |
| | | student01 | TABLE | | | | | |
| | | user_phoenix | TABLE | | | | | |
| | | location_sure | VIEW | | | | | |
+------------+--------------+----------------+---------------+----------+------------+----------------------------+-----------------+-+
0: jdbc:phoenix:master,slaves1,slaves2:2181>
hbase:
hbase(main):049:0> list
TABLE
STU
STUDENT
STUDENT01
STU_AGE
STU_AGE_02
STU_AGE_03
SYSTEM.CATALOG
SYSTEM.FUNCTION
SYSTEM.MUTEX
SYSTEM.SEQUENCE
SYSTEM.STATS
location_sure
location_sure0
student01
test
test00
test01
test02
test03
userWalkInfo
user_phoenix
21 row(s) in 0.0060 seconds
=> ["STU", "STUDENT", "STUDENT01", "STU_AGE", "STU_AGE_02", "STU_AGE_03", "SYSTEM.CATALOG", "SYSTEM.FUNCTION", "SYSTEM.MUTEX", "SYSTEM.SEQUENCE", "SYSTEM.STATS", "location_sure", "location_sure0", "student01", "test", "test00", "test01", "test02", "test03", "userWalkInfo", "user_phoenix"]