phoenix索引

 phoenix可以让我们像使用传统的关系型数据库一样,来操作HBase。目的是降低hbase的使用难度。phoenix也可以像关系型数据库一样,来创建索引,增加访问速度。

 我有一个MYDB.T1表,表中内容如图所示。

create table MYDB.T1(id INTEGER not null primary key,name varchar,age integer) ;

现在对name字段增加索引。create index idx_mydb_t1_name on MYDB.T1(name) ; 很多人会在这一步报错,错误如下:

Mutable secondary indexes must have the hbase.regionserver.wal.codec property set to org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec in the hbase-sites.xml of every region server. tableName=IDX_MYDB_T1_NAME

 原因是hbase-site.xml缺少配置参数。我们需退出Phoenix,停止hbase,在hbase-site.xml上增加如下配置

  <property>

               <name>hbase.regionserver.wal.codec</name>
                <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
 </property>




分发到所有hbase节点,然后重启hbase,重新进入phoenix。

再次执行创建索引命令,创建成功,!tables查看表,发现多了一张表。

在hbase shell 下,我们scan这张表。


我们发现,name列中的值,已经成为新出现的这张表的rowkey的一部分,由于rowkey是排序的,所以我们可以通过索引快速定位到相应的row,而且,此表rowkey值的后四个字节,是MYDB.T1表中的rowkey,我们可以根据name索引快速定位到MYDB.T1的相应行。这就是Phoenix索引的原理。

如何删除Phoenix索引:drop index idx_mydb_t1_name on MYDB.T1 ;

附:当我们用javaAPI访问Phoenix的时候,需要手动设置开启事务自动提交,或者,手动提交事务!

未经本人允许,不准任何人以任何形式转载(国内的技术贴抄袭实在太严重了)。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值