HBase版本:1.2.0-cdh5.10.2
Phoenix版本:phoenix-4.9
虽然HBase的RowKey已经进行了精心+巧妙的设计,
但是对HBase来说不是不够用,于是乎就用Phoenix为HBase创建二级索引来进一步提高查询需求
Phoenix创建视图映射Hbase中已创建的表的时候,各种难产,网上翻了好多资料都没有搞定,这里记录一下
登陆HBase Shell
hbase shell
在HBase里创建表,命名为USER:
# 创建表:
create 'USER', 'INFO'
再来点数据
put 'USER', 'bbbZZZ1004', 'INFO:NAME', 'WeiDong'
put 'USER', 'bbbZZZ1004', 'INFO:AGE', '27'
put 'USER', 'bbbZZZ1004', 'INFO:HOME', 'ZhouKou'
put 'USER', 'bbbZZZ1005', 'INFO:NAME', 'XiaoMeng'
put 'USER', 'bbbZZZ1005', 'INFO:AGE', '27'
put 'USER', 'bbbZZZ1005', 'INFO:HOME', 'YuLin'
put 'USER', 'bbbTTT1006', 'INFO:NAME', 'GuiPing'
put 'USER', 'bbbTTT1006', 'INFO:AGE', '39'
put 'USER', 'bbbTTT1006', 'INFO:HOME', 'ZhengZhou'
注意
这里HBase表名、列簇、列修饰符为什么全部都是大写的呢?
因为在Phoenix里写着方便啊,Phoenix里的表名要与HBase的表名保持一致
Phoenix不管你输入的是大写还是小写都默认把它转成大写的,如果要小写的话必须加上引号,
比如说如果HBase里表名是大写的
我们在Phoenix里写sql是这样的:select * from user
如果是小写的话就要加上引号了:select * from "user"
看下插入的数据:
scan 'USER'
我这边刚刚创建这个表,里面的数据比较少,如果你数据量很大的话可千万不能这么来,可以使用下面的命令
scan 'USER', {LIMIT=>10}
这样就限制最多看10条数据了
切换到Phoenix的根目录下
连接Phoenix
bin/sqlline.py cm01,cm02,cm03
cm01,cm02,cm03这是Zookeeper的主机名
主机名已经映射了IP地址了,如果你没有映射的话就用IP吧
另外,加不加2181的端口号都可以
创建视图
create view user (
pk varchar primary key,
info.name varchar,
info.age varchar,
info.home varchar
) as select * from user;
一开始的时候一直没有加后面的as select * from user
,一直创建不成功,后来无意之间把它加上就好了,看来Phoenix与传统的数据库还是有些不一样啊
查看是否创建成功
!tables
再看下表结构
!describe user
OK,现在可以查下数据了
select * from user;
最后咱再在HBase里插入点数据看看Phoenix的视图能否实时更新
在HBase里插点数据
put 'USER', 'cccTTT1007', 'INFO:NAME', 'YongFa'
put 'USER', 'cccTTT1007', 'INFO:AGE', '27'
put 'USER', 'cccTTT1007', 'INFO:HOME', 'LuYi'
put 'USER', 'cccTTT1008', 'INFO:NAME', 'LuiYa'
put 'USER', 'cccTTT1008', 'INFO:AGE', '27'
put 'USER', 'cccTTT1008', 'INFO:HOME', 'ZhengZhou'
put 'USER', 'cccSSS1009', 'INFO:NAME', 'KeMeng'
put 'USER', 'cccSSS1009', 'INFO:AGE', '27'
put 'USER', 'cccSSS1009', 'INFO:HOME', 'NanYang'
到Phoenix再查下
select * from user;
至此完成,有用就点个赞吧