Phoenix SQL总结

Phoenix SQL总结

建表语句

--建表
create table if not exists "student"(
	id varchar primary key,
    name varchar
)
--插入数据
upsert into "student"(id,name) values("1001","zhangsan");
upsert into "student"(id,name) values("1002","lisi");
upsert into "student"(id,name) values("1003","wangwu");
upsert into "student"(id,name) values("1004","zhaoliu");
upsert into "student"(id,name) values("1005","xiaobei");
upsert into "student"(id,name) values("1006","xiaoxiao");
upsert into "student"(id,name) values("1007","xiaohao");

CRUD

增删改

--增加数据
upsert into tablename(primary key name,col1,col2...) values(primary key value,col1 value,col2 value...)

upsert into "student"(id,name) values("1008","haohao")

--修改数据
upsert into tablename(primary key name,col1,col2...) values(primary key value,col1 value,col2 value...)

upsert into "student"(id,name) values("1001","xiaozhang")
--删除数据
delete from tablename where col1=value;
drop table tablename;

delete from "student"  where id='1007';
drop table "student";

--基本查询
select id,name from student;
--表左联接
select s.id,s.name from student s
left join student t
on s.id = t.id
--表右联接
select s.id,s.name from student s
right join student t
on s.id = t.id
--表内联接
select s.id,s.name from student s
inner join student t
on s.id = t.id

映射

为什么要使用映射?

在Hbase中直接创建的表,Phoenix不会直接显示出来,需要借助映射建立一张中间表,映射Hbase和phoenix里的数据. 该操作类似于Hive中的外部表

视图映射

建立视图时,需把phoenix视图名称和hbasetablename名称对应即可

---1.在Hbase中建立一张表并插入数据
        create 'fruit','info'
        put 'fruit','1001','info:name','apple'
---2.在Phoenix里建立视图
        create view "fruit"(id varchar primary key,"info"."name" varchar);
---3.在Phoenix里查看是否建立成功
        !table
---4.查询该视图表,就会对应显示Hbase里的数据
        select * from fruit;

视图映射注意事项

  1. 视图映射表是只读的,作用是吧hbase里的fruit表映射到了phoenix
  2. 视图只能用作查询,不能用作修改
  3. 视图可以只映射部分数据
  4. 当我们不希望对数据进行修改操作时,可以考虑使用视图映射

表映射

上面提到了视图映射的使用,可视图映射只能对数据进行查询操作,如果想修改原表数据,则需使用表映射,使用表映射时,只需在视图映射建表语句的基础之上,在末尾添加column_encoded_bytes=0,该属性的意思是不对Hbase的表中数据做序列化操作,

---1.在Hbase中建立一张表并插入数据
        create 'fruit','info'
        put 'fruit','1001','info:name','apple'
---2.在Phoenix里建立视图
        create view "fruit"(id varchar primary key,"info"."name" varchar) column_encoded_bytes=0;
---3.在Phoenix里查看是否建立成功
        !table
---4.更改数据
		upsert into "fruit" values('1001','org')
---5.查询该视图表,就会对应显示Hbase里的数据
        select * from fruit;

思考:为什么有表映射还要使用视图映射?

  1. 使用视图映射数据为只读,更安全
  2. 使用表映射数据可读写,更方便

二级索引

使用索引可以提高查询速度,但会占用更大的空间

全局索引

全局索引介绍:

​ 1)查询时select后只能包含索引列
​ 2)使用全局索引查询时,如果 能从索引表出数据,绝对不会去原表查询
​ 3)写操作比较多的表效率会很低,因为写数据时要更新索引表

--创建全局索引的语法
    create index 索引名称 on 表名 (索引列) 
--创建多级索引的语法
    create index 索引名称 on 表名 (索引列1,索引列2)
--删除索引的语法
    drop index 索引名称 on 原表名;
--建立包含其他列的索引
    create index 索引名称 on 原表名(索引列) include(包含的列1,包含的列2);
    --使用include后,使用索引查询数据时可以吧include的关联的数据一起查出来

本地全局索引

本地索引介绍
​ 1)本地索引适合写操作比较多的场景
​ 2)本地索引的实现方法,就是在原表内新加了一列主键
​ 3)使用本地索引查询数据时,会先通过索引列找到对应列的主键,然后通过主键进行范围筛选

--创建本地索引的语法
    create local 索引名 on 原表(索引列)
--删除索引的语法
    drop index 索引名称 on 原表名;

本地索引和全局索引的区别

1) 本地索引适合修改写入场景多的表
全局索引适合查询场景较多的表
2) 空间代价
​ 全局高,本地低
3) 插入修改
​ 本地块,全局慢
4)查询速度
​ 全局快,本地慢

原文地址:https://www.cnblogs.com/traveller-hzq/p/14170018.html