删除Accumulo中的多个表?

时间:2016-02-04 17:00:17

标签: accumulo

我的Accumulo开发实例变得非常混乱,为测试创建了很多表。

我想批量删除大量的表。

除了deleting the entire instance之外,还有办法吗?

顺便说一句 - 如果它有任何相关性,那么这个实例只是一台机器“集群”。

3 个答案:

答案 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上的功能请求,以及实现它的任何贡献,甚至更多。