问题情况,在使用phoenix操作hbase的表的时候出现phoenix无法读取从hbase中创建的表:
比如通过hbase shell 创建了表:StudentAndCourse
通过Phoenix(也可以使用dbeaver连接phoenix)创建表:STUDENT
在habase shell中的表的包含STUDENT,也包含StudentAndCourse
hbase(main):004:0> list
TABLE
STUDENT
SYSTEM.CATALOG
SYSTEM.CHILD_LINK
SYSTEM.FUNCTION
SYSTEM.LOG
SYSTEM.MUTEX
SYSTEM.SEQUENCE
SYSTEM.STATS
SYSTEM.TASK
StudentAndCourse
10 row(s)
Took 0.0394 seconds
=> ["STUDENT", "SYSTEM.CATALOG", "SYSTEM.CHILD_LINK", "SYSTEM.FUNCTION", "SYSTEM.LOG", "SYSTEM.MUTEX", "SYSTEM.SEQUENCE", "SYSTEM.STATS", "SYSTEM.TASK", "StudentAndCourse"]
但是在phoenix中的表只有STUDENT
需要在phoenix中读取或操作到hbase shell创建的表,主要是创建视图和创建表的两种映射方式
&1.使用视图的方式:
01.在hbase shell上生成一个新的表名为Gadaite
// 其中F1,F2为列簇
hbase(main):021:0> create "Gadaite","F1","F2"
Created table Gadaite
Took 0.7966 seconds
=> Hbase::Table - Gadaite
02.使用hbase shell向Gadaite表写入数据
// 其中F11,F12,F21,F22 为对应的F1,F2列簇下的字段
hbase(main):026:0> put "Gadaite",'001', "F1:F11",'F1.F11'
Took 0.0257 seconds
hbase(main):027:0> put "Gadaite",'001', "F1:F12",'F1.F12'
Took 0.0061 seconds
hbase(main):028:0> put "Gadaite",'001', "F2:F21",'F2.F21'
Took 0.0053 seconds
hbase(main):029:0> put "Gadaite",'001', "F2:F22",'F2.F22'
Took 0.0047 seconds
hbase(main):030:0> put "Gadaite",'002', "F1:F11",'G1.G11'
Took 0.0047 seconds
hbase(main):031:0>
hbase(main):032:0* put "Gadaite",'002', "F1:F12",'G1.G12'
Took 0.0102 seconds
hbase(main):033:0> put "Gadaite",'002', "F2:F21",'G2.G21'
Took 0.0059 seconds
hbase(main):034:0> put "Gadaite",'002', "F2:F22",'G2.G22'
Took 0.0071 seconds
03.在hbase shell中查看该表
// ROW 为第一个维度:行键
// COLUMN为第二个维度:列簇
// CELL为第三个维度:列簇下的字段
// timestamp为第四个维度:时间戳
hbase(main):036:0> scan "Gadaite"
ROW COLUMN+CELL
001 column=F1:F11, timestamp=1649852184595, value=F1.F11
001 column=F1:F12, timestamp=1649852206467, value=F1.F12
001 column=F2:F21, timestamp=1649852266435, value=F2.F21
001 column=F2:F22, timestamp=1649852282515, value=F2.F22
002 column=F1:F11, timestamp=1649852372440, value=G1.G11
002 column=F1:F12, timestamp=1649852392818, value=G1.G12
002 column=F2:F21, timestamp=1649852437294, value=G2.G21
002 column=F2:F22, timestamp=1649852447418, value=G2.G22
2 row(s)
Took 0.0131 seconds
04.在phoenix上创建视图,并查询,显然我们把列族以及字段展开了
05.删除视图,phoenix视图会被删除,但是hbase不会
hbase(main):037:0> list
TABLE
Gadaite
STUDENT
SYSTEM.CATALOG
SYSTEM.CHILD_LINK
SYSTEM.FUNCTION
SYSTEM.LOG
SYSTEM.MUTEX
SYSTEM.SEQUENCE
SYSTEM.STATS
SYSTEM.TASK
StudentAndCourse
11 row(s)
Took 0.1010 seconds
=> ["Gadaite", "STUDENT", "SYSTEM.CATALOG", "SYSTEM.CHILD_LINK", "SYSTEM.FUNCTION", "SYSTEM.LOG", "SYSTEM.MUTEX", "SYSTEM.SEQUENCE", "SYSTEM.STATS", "SYSTEM.TASK", "StudentAndCourse"]
&2.使用表的方式
01.将创建视图的view,换成table即可,同时加上如下内容,起到映射作用,但是会降低性能
column_encoded_bytes=0
不加上的情况:(映射的表没有内容)
输出:
加上的情况:
输出:(创建表就有内容了)
02.删除表之后查看hbase和phoenix中情况
都已经删除了:
hbase(main):001:0> list
TABLE
STUDENT
SYSTEM.CATALOG
SYSTEM.CHILD_LINK
SYSTEM.FUNCTION
SYSTEM.LOG
SYSTEM.MUTEX
SYSTEM.SEQUENCE
SYSTEM.STATS
SYSTEM.TASK
StudentAndCourse
10 row(s)
Took 0.3789 seconds
=> ["STUDENT", "SYSTEM.CATALOG", "SYSTEM.CHILD_LINK", "SYSTEM.FUNCTION", "SYSTEM.LOG", "SYSTEM.MUTEX", "SYSTEM.SEQUENCE", "SYSTEM.STATS", "SYSTEM.TASK", "StudentAndCourse"]