Hbase 第四节课 Phenix的使用

目录

Phoenix的使用:

1、连接sqlline

2、常用命令

1、创建表

2、显示所有表

3、插入数据

4、查询数据,支持大部分sql语法

5、删除数据

6、删除表

7、退出命令行

phoenix表映射

1、视图映射

2、表映射

3、Phoenix二级索引:


Phoenix的使用:

1、连接sqlline

sqlline.py master,node1,node2

2、常用命令

1、创建表

CREATE TABLE IF NOT EXISTS STUDENT (

id VARCHAR NOT NULL PRIMARY KEY,

name VARCHAR,

age BIGINT,

gender VARCHAR ,

clazz VARCHAR

);

2、显示所有表

!table

3、插入数据

upsert into STUDENT values('1500100004','葛德曜',24,'男','理科三班');

upsert into STUDENT values('1500100005','宣谷芹',24,'男','理科六班');

upsert into STUDENT values('1500100006','羿彦昌',24,'女','理科三班');

4、查询数据,支持大部分sql语法

select * from STUDENT ;

select * from STUDENT where age=24;

select gender ,count(*) from STUDENT group by gender;

select * from student order by gender;

5、删除数据

delete from STUDENT where id='1500100004';

6、删除表

drop table STUDENT;

7、退出命令行

!quit

phoenix表映射

默认情况下,直接在hbase中创建的表,通过phoenix是查看不到的

如果需要在phoenix中操作直接在hbase中创建的表,则需要在phoenix中进行表的映射。映射方式有两种:视图映射和表映射

1、视图映射

视图是只读的,所以只能用来做查询,无法通过视图对源数据进行修改等操作

在phoenix创建视图, primary key 对应到hbase中的rowkey

create view "test"(

empid varchar primary key,

"name"."firstname" varchar,

"name"."lastname" varchar,

"company"."name" varchar,

"company"."address" varchar

)column_encoded_bytes=0;

注意:column_encoded_bytes=0不加可能导致查询数据不显示

select * from "test";

drop view "test";

2、表映射

创建对HBase的表映射,有两类:

1) 当HBase中已经存在表时,可以以类似创建视图的方式创建关联表,只需要将create view改为create table即可。

create table "test" (

empid varchar primary key,

"name"."firstname" varchar,

"name"."lastname"varchar,

"company"."name" varchar,

"company"."address" varchar

)column_encoded_bytes=0;

2)当HBase中不存在表时,可以直接使用create table指令创建需要的表,并且在创建指令中可以根据需要对HBase表结构进行显示的说明。

使用create table创建的关联表,如果对表进行了修改,源数据也会改变,同时如果关联表被删除,源表也会被删除。但是视图就不会,如果删除视图,源数据不会发生改变。

3、Phoenix二级索引:

1、全局索引

全局索引适合读多写少的场景。如果使用全局索引,读数据基本不损耗性能,所有的性能损耗都来源于写数据。数据表的添加、删除和修改都会更新相关的索引表(数据删除了,索引表中的数据也会删除;数据增加了,索引表的数据也会增加)

注意: 对于全局索引在默认情况下,在查询语句中检索的列如果不在索引表中,Phoenix不会使用索引表将,除非使用hint。

2、本地索引

本地索引适合写多读少的场景,或者存储空间有限的场景。和全局索引一样,Phoenix也会在查询的时候自动选择是否使用本地索引。本地索引因为索引数据和原数据存储在同一台机器上,避免网络数据传输的开销,所以更适合写多的场景。由于无法提前确定数据在哪个Region上,所以在读数据的时候,需要检查每个Region上的数据从而带来一些性能损耗。

注意:对于本地索引,查询中无论是否指定hint或者是查询的列是否都在索引表中,都会使用索引表。

3、覆盖索引

覆盖索引是把原数据存储在索引数据表中,这样在查询时不需要再去HBase的原表获取数据就,直接返回查询结果。

注意:查询是 select 的列和 where 的列都需要在索引中出现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值