Phoenix

一、Phoenix的特点

1.将sql查询编译为Hbase扫描
2.确定扫描的rowkey的最佳开始和结束位置
3…扫描并行执行
4.将where字句推送到服务器端的过滤器
5.通过协处理器进行聚合操作
6.完美支持Hbase耳机索引创建
7.DML命令以及通过DDL命令创建和操作表和版本化增量更改
8.容易集成:如spark,hive,Pig,Flume,MapReduce。

二、Phoenix和Hbase的对应关系

hbase--------------------Phoenix
namespace----------------------database
table-----------------------table
column family---------------------cf:cq
column quliafier
rowkey-------------------------主键
在SQL中创建表时,指定的主键时联合主键(由多个列共同作为主键),

三、使用Phoenix

1.hbase中没有表,希望在Phoenix中建表,在Phoenix中使用SQL向hbase表中插入数据
create table if not exists us_poputation(
state char(2) not null,
city varchar(10) not null,
population bigint
constraint my_pk primary key(state,city)) column_encoded_bytes=0;
在建表时,如果不定义列族,那么默认为0号列族!

create table if not exists “ns1”.us_population(
state char(2) not null,
city varchar(10) not null,
population bigint
constraint my_pk primary key(state,city)) column_encoded_bytes=0;
upsert into “ns1”.“us_population” values(‘NY’,‘NewYork’,8143197);
upsert into “ns1”.“us_population” values(‘CA’,‘Los Angeles’,3844829);
upsert into “ns1”.“us_population” values(‘IL’,‘Chicago’,2842518);

2.hbase中已经存在表,需要在Phoenix中建表,进行映射!映射后,再执行操作!
①如果这个表只希望执行查询操作,不希望执行修改,可以创建view
create view emp(
empno varchar primary key,
“info”.ename varchar,
“info”.job varchar,
“info”.mgr varchar,
“info”.hiredate varchar,
“info”.sal varchar,
“info”.comm varchar,
“info”.deptno varchar
)
②如果这个表需要增删改查,可以创建表
create table emp(
empno varchar primary key,
“info”.ename varchar,
“info”.job varchar,
“info”.mgr varchar,
“info”.hiredate varchar,
“info”.sal varchar,
“info”.comm varchar,
“info”.deptno varchar
)column_encoded_bytes=0

四、二级索引
1.在hbase中,查询数据时,一般都会指定rowkey,或者指定rowkey的范围!
rowkey称为一级索引
如果查询某个具体的列,hbase在高版本也支持在列上创建索引,在列上创建的索引称为二级索引!
之前如果要创建二级索引,需要自己调用Hbase的API,写起来很麻烦!
如果使用Phoenix,只需要一行create index 索引名 表名(列) SQL,Phoenix帮助我们创建二级索引,二级索引的目的在于执行查询某些列的数据时,加快速率!
2.使用explain+select SQL查看是否使用了索引
在mysql中type=all,代表全部扫描,没有使用上索引!
在Phoenix中如果出现了FULL SCAN,代表没有使用上二级索引,出现了全部列扫描
测试时不能写select *;;
如果出现RANGE SCAN OVER IDX_AGE,代表使用上了某个索引,进行了范围查询!
3.索引的使用
创建索引:create index idx_age on “t3”(“info”.“age”);
删除索引:drop index 索引名 on 表名
4.二级索引的分类
在hbase中二级索引分为gloal(全局)和local(本地)的二级索引!
不管是全局索引还是本地索引,都是为了加快查询!从作用上说,没有区别!
区别在于适合的场景不同:
gloal(全局)索引,在创建后,专门在hbase中,生成一个表,将索引信息存储在表中!
适合多读少写的场景!每次写操作,不仅要更新数据,还需要更新索引!
数据在rs1表中,索引在rs2中,每次发送一次put请求,必须先请求rs1,再请求rs2,才能完成更新 !
local(本地索引),在创建后,在表中,创建一个列族,在这个列族中保存索引的信息!
适合多写少读的情况,索引是以列族的形式在表中存储,索引和数据在一个rs上,此时频繁写操作时,只需要请求当前的regionserver!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值