这是我参与「第四届青训营 」笔记创作活动的第7天
Phoenix创建视图
- 将HBase已经存在的表进行映射
- 名称空间和表名一模一样
- 列蔟名和列名也必须要一一对应
create view "名称空间"."表名"(
rowkey对应列名 varchar primary key,
"列蔟名"."列名" varchar,
);
Phoenix JDBC开发
驱动:PhoenixDriver.class.getName()
JDBC连接URL:jdbc:phoenix:node1.itcast.cn:2181
- 加载JDBC驱动
- 使用DriverManager获取连接
- 准备一个SQL语句
- 准备PrepareStatement
- 设置参数
- 执行语句
- 遍历结果
- 关闭资源
Phoneix索引的分类
-
全局索引
- 针对整个表,在整个HBase集群中,都是有效的,索引数据会分布在全局
-
本地索引
- 索引数据和表数据存储在一起,方便高效查询
-
覆盖索引
- 将数据直接放入在索引中,直接查询索引就可以将数据查询出来,避免再根据rowkey查询数据
-
函数索引
- 基于一个函数表达式来建立索引,例如: where substr(xxx, 0, 10)....,就可以基于substr(xxx, 0, 10)建立索引
全局索引+覆盖索引
全局索引会独立创建一张HBase的表来保存索引数据,一般经常配合覆盖索引使用。将要查询的列、以及索引列全部的数据保存在索引表中,这样,可以有效避免,查索引之后还要去查询数据表。一次查询,全部搞定。
-- 二、在phoenix中创建二级索引
-- 根据用户ID来查询订单的ID以及对应的支付金额
-- 建立一个覆盖索引,加快查询
create index IDX_USER_ID on ORDER_DTL(C1."user_id") include ("id", C1."money");
-- 删除索引
drop index IDX_USER_ID on ORDER_DTL;
-- 强制使用索引查询
explain select /*+ INDEX(ORDER_DTL IDX_USER_ID) */ * from ORDER_DTL where "user_id" = '8237476';
本地索引
- 使用 create local index 索引名称 on 表名(列1, 列2)
- 本地索引对数据是有侵入性的,就是原先的数据会被编码处理,所以只要创建了本地索引,原先的数据就会隐藏起来
- 性能提升几十倍、上百倍
- 当drop掉索引后,数据又可以恢复回来
- 这些都是由Phoenix的协处理器来实现的