Phoenix 的一次删除索引,删除表的惨痛经历

在最近的一次项目之中,我经历了一次Phoenix 的一次删除索引,删除表的惨痛经历。历时2天才找到解决方案,特此分享给大家。

背景:
想要在Hbase的的表中(表也是phoenix建立的)再建一个phoenix的二级索引。代码如下:

-- 建表
CREATE TABLE "FN1"."CHATDOC" (
        ID UNSIGNED_LONG NOT NULL PRIMARY KEY,
        PARENTID UNSIGNED_LONG ,
        TITLE VARCHAR(2000),
        LINKURL VARCHAR(2000),
        DOCCREATOR VARCHAR(100)
);
-- 创建的二级索引
CREATE INDEX IDX_CHATDOC_INCLUD ON FN1.CHATDOC(PARENTID) INCLUDE(TITLE,LINKURL,DOCCREATOR) COMPRESSION = 'GZ', SALT_BUCKETS = 2;

本以为是一个正常创建覆盖索引,但是没有想到这个却影响到了主表的数据,主表的PARENTID字段后面的几位变成了0,(这是一个偶然事件,只有这个表会出现,向phoenix提了issue 也没有解决)。那这种已经影响了元数据的事情肯定不能做了。所以我又将二级索引给删除了

DROP INDEX  IDX_CHATDOC_INCLUD ON FN1.CHATDOC;

这个时候神奇的事情发生了,(可能是网络波动,可能是资源竞争)。我再查询我的主表的时候,发现表不见了。
在这里插入图片描述
一查,发现查询映射到了之前删除的二级索引中。那这个时候就问题严重了,我无法通过phoenix对原表进行任何的操作,hbase原生操作是可以的,而且也无法重新的去创建之前删除的二级索引。那之后我做了以下几件事:

1、去hbase 查看表信息
在这里插入图片描述
发现FN1.CHATDOC 这个表在 HBase 底层还有一个 phoenix indexer coprocessor 没有卸载掉。当时的解决思路有几种:

  1. phoenix 重新 drop 一次 index
  2. 未生效,hbase shell 手动卸载这个 coprocessor

但是2种都没有成功。
就当我排查来排查去,准备放弃准备删habse的数据的时候。我去查询了一下phoenix的mete数据
在这里插入图片描述
啊啊啊啊,简直了在这里还有个数据等着我呢。之后我就删除了该元数据,问题完美解决。

--查看元数据
select * from SYSTEM."CATALOG" where TABLE_NAME='CHATDOC' AND TABLE_SCHEM ='FN1';
--删除元数据字段
DELETE from SYSTEM."CATALOG" where TABLE_NAME='CHATDOC' AND TABLE_SCHEM ='FN1' AND COLUMN_FAMILY ='IDX_CHATDOC_INCLUD';

这就是我经历的全过程了,希望对大家有所帮助

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值