一、說明
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"]