Phoenix开发指南
介绍
Apache Phoenix项目由saleforce开源并贡献给Apache基金会,目前为Apache基金会的顶级项目。它是构建在HBase上的SQL中间层。 Phoenix会将用户编写的sql查询编译为一系列的scan操作,最终产生通用的JDBC结果集返回给客户端,小范围的查询可做到毫秒级响应,千万数据的响应速度为秒级。
使用
在完成Phoenix的安装后,进入Phoenix客户端目录,使用命令行工具:
- 选择集群master或者core节点,进入客户端目录
# 这里我们选择master1节点 cd /home/hadoop/phoenix/bin
- 使用Phoenix python命令行工具
./sqlline.py uhadoop-xxx-master1:2181 0: jdbc:phoenix:uhadoop-xxxx-master1>
- 使用sql操纵Phoenix表
参考文档:https://phoenix.apache.org/language/index.html#create
tips:
Phoenix会自动将表名和字段名转换为大写字母,如果不想转换的话可以使用双引号把字段或者表名括起来
- 使用帮助,查看全部Phoenix命令
0: jdbc:phoenix> !help
- 查看table列表
0: jdbc:phoenix> !table
- 创建新表
0: jdbc:phoenix:> create table test ( mykey integer not null primary key, mycolumn varchar );
- 插入数据
0: jdbc:phoenix:> upsert into test values (1,'uhadoop'); 0: jdbc:phoenix:> upsert into test values (2,'phoenix');
- 查看表内容
0: jdbc:phoenix:> select * from test;
- 删除表内容
0: jdbc:phoenix:> delete from test where mykey=1;
* 为表创建索引
0: jdbc:phoenix:> create local index test_idx on test(mycolumn);
- 查看表的索引信息
0: jdbc:phoenix:> !indexes test
- 删除表
0: jdbc:phoenix:> drop table if exists test;
- 退出客户端
0: jdbc:phoenix:>!exit
- 使用Phoenix与已有hbase表建立表映射关系
* 4.1 进入hbase shell命令行创建表并插入数据
[root@uhadoop-xxx-master1 bin]# hbase shell hbase(main):009:0> create 'phoenix','info' hbase(main):010:0> put 'phoenix', 'row001','info:name','phoenix' hbase(main):011:0> scan 'phoenix'
- 4.2 进入Phoenix python客户端,建立映射关系
tips:
1.Phoenix 4.10 及以上的版本,Phoenix对列对编码格式有所改变([官网说明文档](http://phoenix.apache.org/columnencoding.html)),所以在建立与hbase映射关系时,需要设置 COLUMN_ENCODED_BYTES 属性为 0,即不让 Phoenix 对 column family 进行编码。
> 2.HBase数据表默认主键列名是ROW
> 3.为了防止Phoenix自动将小写column转大写,需要用双引号将column扩起来
> 4.如果映射关系建立成功,建标之后可以看到有多少行数据被影响
- 创建表映射
0: jdbc:phoenix:> create table "phoenix"("ROW" varchar primary key, "info"."name" varchar) column_encoded_bytes=0; 1 row affected (6.523 seconds)
- 删除表(注意,这里hbase中表也会被同时删除)
0: jdbc:phoenix:> drop table "phoenix";
- 使用Phoenix与已有hbase表建立视图映射关系
- 5.1 创建视图映射
# 如果hbase中不存在phoenix表,需要按照4.1节的方式在hbase中建表 0: jdbc:phoenix:> create view "phoenix"("ROW" varchar primary key, "info"."name" varchar);
* 5.2 查询视图
0: jdbc:phoenix:>select * from "phoenix";
- 5.3 删除视图
0: jdbc:phoenix:> drop view "phoenix";