一、Phoenix简介
1、定义
构建在 HBase 之上的开源 SQL 层
可以使用标准的 JDBC API 去建表, 插入数据和查询 HBase 中的数据
避免使用 HBase 的客户端 API
位置:应用和 HBase 之间
2、特点
SQl 查询编译为 HBase 扫描
扫描并行执行
DML命令以及通过DDL命令创建和操作表
容易集成
3、架构
4、数据存储
将 HBase 的数据模型映射关系型世界
二、Phoenix快速入门
1、安装部署
配置环境变量:export PATH=$PATH:$PHOENIX_HOME/bin
启动Phoenix:/opt/module/phoenix » bin/sqlline.py hadoop201,hadoop202,hadoop203:2181
2、Phoenix表操作
显示所有表:!tables# 或者!table
创建表
![](https://i-blog.csdnimg.cn/blog_migrate/19c9eb86a65ccd850670cd028f7b0468.png)
插入记录
upsert into us_population values('IL','Chicago',2842518);
查询记录
删除记录
delete from us_population where state='NY';
删除表
drop table us_population;
退出命令行
! quit
3、Phoenix表映射
Phoenix 表和 HBase 表的关系
使用Phoenix操作在HBASE中创建的表,需要进行映射,映射方式有两种: 1. 视图映射 2. 表映射
视图映射:创建的视图是只读的, 所以只能用来查询
表映射
create table "test1"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar) column_encoded_bytes=0;
区别:使用create table创建的关联表,如果对表进行了修改,源数据也会改变
三、Phoenix创建HBASE二级索引
1、HBase 的二级索引
把 rowkey 称作一级索引,非 rowkey 字段进行数据检索和查询, 往往要通过 MapReduce/Spark 等分布式计算框架进行,硬件资源消耗和时间延迟都会比较高。
从 0.94 版本开始, HBase 开始支持二级索引,并且有多种支持方案
2、配置 HBase 支持 Phoenix 创建二级索引
修改Hregionerver 和Hmaster 节点的配置文件:hbase-site.xml
测试其他字段是否支持索引(全表扫描)
create index idx_user_1 on user_1(name)
查询的时候也必须只查询 name 字段.
3、Phoenix 创建索引
全局索引global index :多读少写,写数据的时候会消耗大量开销,索引表是分布在不同的数据节点上
读数据的时候 Phoenix 会选择索引表来降低查询消耗的时间。
CREATE INDEX my_index ON my_table (my_col)
局部索引:写操作频繁,索引数据和数据表的数据是存放在相同的服务器中
CREATE LOCAL INDEX my_index ON my_table (my_index)
全局索引, 也支持查询其他字段
删除索引
DROP INDEX my_index ON my_table