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