目录
1、创建完二级索引之后,hbase新增数据,索引是否会自动创建
前言
本文主要测试Phoenix二级索引。
生成测试数据
之前的文章中详细的介绍了数据生成和导入hbase中的过程,详情请点击这里
Phoenix创建映射表和视图
创建映射表
#删除映射表时,hbase中的数据也会被删除
create table "test"("rowkey" varchar primary key,"cf"."2502" varchar,"cf"."2503" varchar,"cf"."2000" varchar,"cf"."VID" varchar,"cf"."VIN" varchar);
创建视图
#删除视图时,hbase中的数据不受影响
create view "test"("rowkey" varchar primary key,"cf"."2502" varchar,"cf"."2503" varchar,"cf"."2000" varchar,"cf"."VID" varchar,"cf"."VIN" varchar);
其他操作
#where条件查询
select * from "test" where VIN='LNPHDRAG4LVKEF9994';
#查看执行计划,如果出现FULL SCAN则没有走索引,属于全表扫描
explain select * from "dingzq" where VIN='LNPHDRAG4LVKEF9994';
创建二级索引
create index "index_test" on "dingzq" ("cf"."VIN");
执行之后可能会报如下错误:
Error: ERROR 1029 (42Y88): 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=index_test (state=42Y88,code=1029)
在hbase-site.xml中添加以下配置即可:
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
再次创建,成功
测试二级索引
#没有创建索引之前,执行以下命令,执行计划是FULL SCAN全局扫描,创建完索引之后执行计划为RANGE SCAN
explain select 2502,2503 from "test" where VIN='LNPHDRAG4LVKEF9994';
没有创建索引执行:
创建索引之后执行:
问题:
1、创建完二级索引之后,hbase新增数据,索引是否会自动创建
下图是网友总结的,测了部分,确实是这种情况