为什么使用Phoenix?
Phoenix是HBase的一层包装,通过这层包装,我们可以像使用MySQL一样特别方便的操作HBase。此外,Phoenix还可以很方便的创建二级索引。
连接HBase
sqlline.py hadoop01,hadoop02,hadoop03:2181
注意:主机名是zookeeper所在的节点。
显示所有表
!tables 或 !table
注意:此命令最后没有分号
建表
CREATE TABLE STUDENT(id integer PRIMARY KEY,name VARCHAR);
CREATE TABLE "grade"(id integer PRIMARY KEY,class VARCHAR);
注意:
- 必须指定主键,主键是HBase表中的rowkey。
- 如果表名是小写,那么必须用双引号。
增
UPSERT INTO STUDENT VALUES(1001,'Tom');
UPSERT INTO "grade" VALUES(1,'grade1');
注意:插入数据要用upsert。
删
删除数据
DELETE FROM STUDENT WHERE name='Jerry';
删除表
DROP TABLE STUDENT;
改
UPSERT INTO STUDENT VALUES(1001,'JoJo');
注意: 要修改的rowkey要存在,否则就是插入数据。
查
SELECT * FROM STUDENT;
映射
默认情况下,在HBase中创建的表,在Phoenix中是看不到的。如果想在Phoenix中操作HBase的表,我们就需要创建表的映射,映射方式有两种,视图映射和表映射。
视图映射
视图映射不能操作表数据,只能进行查询。
-- 先在HBase创建测试表
create 'TEST','info'
put 'TEST','1001','info:name','zhangsan'
put 'TEST','1001','info:age','21'
-- 在Phoenix创建视图
CREATE VIEW TEST(
id VARCHAR PRIMARY KEY,
"info"."name" VARCHAR,
"info"."age" VARCHAR);
-- 查询信息
SELECT * FROM TEST;
表映射
- 如果HBase中表不存在,直接在Phoenix中创建表即可自动创建映射。
- 如果HBase中表存在,像创建视图映射那样创建表映射,把view改为table即可。
CREATE TABLE TEST(
id VARCHAR PRIMARY KEY,
"info"."name" VARCHAR,
"info"."age" VARCHAR) column_encoded_bytes=0;
注意: 表映射一定要加上column_encoded_bytes=0。
二级索引
全局二级索引
默认的索引格式,全局索引会在HBase创建新的索引表,索引表和数据表是分开存储的。适用于读多写少的场景。
-- 创建单个字段的全局索引
CREATE INDEX stu_name_index ON STUDENT(name);
-- 创建携带其他字段的全局索引
CREATE INDEX stu_name_index ON STUDENT(name) INCLUDE(address);
本地二级索引
本地索引索引和数据是在同一张表中存储。相对于全局索引来说,查询更慢,但是插入数据更快。
-- 创建本地索引
CREATE LOCAL INDEX stu_name_index ON STUDENT(name);