说明:下面的过程是我推测的过程,具体结果不一定能删除成功(我走过一遍流程,删除成功Phoenix上的映射表后又重新建了Phoenix的映射表.此过程中hbase中对于的原表没有被删除,且数据保持完整.但是后来重现一直没有重现成功.有需要的可以看看可不可以(我预计删除完映射表以后可能需要重启Phoenix,以及hbase吧(我的项目有重启过)))
操作流程:
--1删除Phoenix上的映射表,demo是我的表名
DELETE from SYSTEM.CATALOG where TABLE_NAME ='demo';
--2删除hbase上的一些信息
--查看详情
describe 'demo'
上面图片中红线部分就是我们创建Phoenix的映射表自动添加的东西,有5个.这里是1-5
--设为可编辑
disable 'demo'
--删除,这里可能会存在多个(5个) METHOD=>'table_att_unset' 这个参数好像是固定的,具体的我也不是很明白
alter 'demo',METHOD=>'table_att_unset',NAME=>'coprocessor$1'
alter 'demo',METHOD=>'table_att_unset',NAME=>'coprocessor$2'
alter 'demo',METHOD=>'table_att_unset',NAME=>'coprocessor$3'
alter 'demo',METHOD=>'table_att_unset',NAME=>'coprocessor$4'
alter 'demo',METHOD=>'table_att_unset',NAME=>'coprocessor$5'
--取消可编辑
enable 'demo'
下面是删除完以后的样子
可以看出没有第一张图片中红线部分了
---查看demo中的数据
以上就是删除成功了,如果不出意外的话就可以在Phoenix上重新创建映射表.但是我本人只成功过一次,其他的测试表都没有成功
PS:
在最后我在完整的说一下我的操作过程吧.我是在上一个星期把我操作成功的表从Phoenix中通过
DELETE from SYSTEM.CATALOG where TABLE_NAME ='demo';的方式删除的.删除以后发现重新创建不能创建成功.本来打算直接在hbase中把demo表直接删掉.但是组长不允许说什么也不让我删.让我找找其他方法.然后在今天,我突然想到以前看过一篇文章说Phoenix在创建映射表的时候会往原表中插入一些东西(具体什么忘记了,找不到那篇文章)然后通过describe 'demo'命令发现果然多了5个coprocessor$X . 然后尝试删除掉这些coprocessor$,再在Phoenix中创建映射表,发现创建成功了(此过程操作的是我新创建的一个测试表,此表当时是空的,里面没有数据),然后我又创建几个测试表进行测试,都没有成功(失败在最后重新创建映射表上).但是当我创建我上个星期删除的那个映射表时,竟然成功了.在上个星期到现在我的Phoenix和hbase有重启过(这两个环境是其他人配置的,我目前只是会连接到这两个上,重启等操作自己没有做过).也不知道是不是这个原因.大家可以自己测试一下
=====================================我是分割线===========================
2019年9月11日
今天找到一个另外的一个方法进行曲线操作(实际操作很好用,就是表名需要换一个)
思路:先把表数据备份出来,删除表,创建新表,将数据拷贝回去。
第一:先在hbase上把test_ahyi修改成test_ahyi,具体命令行如下:
hbase(main):001:0>disable 'test_ahyi'
hbase(main):001:0>snapshot 'test_ahyi','pho_test'
hbase(main):001:0>clone_snapshot 'pho_test','test_ahyi2'
hbase(main):001:0>delete_snapshot 'pho_test' -- 备注:这一步我操作失败,告诉我delete_snapshot 不存在
hbase(main):001:0>drop 'test_ahyi' --原表就不能用了
第2:然后再phoenix上创建表test_ahyi2
0: jdbc:phoenix:db1,db2,db3:2181>create table 'test_ahyi2'("kid" varchar primary key,
"info"."name" varchar);