我的Accumulo开发实例变得非常混乱,为测试创建了很多表。
我想批量删除大量的表。
除了deleting the entire instance之外,还有办法吗?
顺便说一句 - 如果它有任何相关性,那么这个实例只是一台机器“集群”。
答案 0 :(得分:4)
在Accumulo shell中,您可以使用deletetable命令的-p选项为要删除的表名指定正则表达式。
答案 1 :(得分:3)
我会对原始答案发表评论,但我缺乏声誉(这里的第一个贡献)。
提供合法的正则表达式示例会很有帮助。
Accumulo shell只能转义某些字符。特别是它不会逃避括号[]。如果要删除以字符串“mytable”开头的每个表,则其他合法的正则表达式命令会出现以下警告/错误。
user@instance> deletetable -p mytable[.]*
2016-02-18 10:21:04,704 [shell.Shell]警告:找不到符合条件的表格
user@instance> deletetable -p mytable[\w]*
2016-02-18 10:21:49,041 [shell.Shell]错误:org.apache.accumulo.core.util.BadArgumentException:只能转义单引号,双引号,空格字符,反斜杠和十六进制在指数19附近输入 deletetable -p mytable [\ w] *
一个有效的shell命令是:
user@instance> deletetable -p mytable.*
答案 2 :(得分:2)
目前没有(从1.7.0版本开始)在一次调用中批量删除多个表的方法。
表删除实际上是以异步方式完成的。客户端提交删除表的请求,该表将在不久的将来的某个时间点删除。问题是在执行删除表的调用之后,客户端然后等待直到删除表。这种阻止完全是人为的,没有必要,但遗憾的是,它目前是如何运作的。
因为每个单独的表删除似乎都被阻止,所以对表名称的简单循环以串行方式删除它们不会很快完成。相反,您应该使用线程池,并行发出删除表请求。
但是,批量删除表命令非常有用。作为一个开源项目,我们非常欢迎他们issue tracker上的功能请求,以及实现它的任何贡献,甚至更多。