删除 Accumulation 中的多个表?

Delete multiple tables in Accumulo?

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

我想批量删除大量表。

除了deleting the entire instance还有其他方法吗?

顺便说一句 - 如果它有任何相关性,这个实例只是一台机器 "cluster"。

目前(从版本 1.7.0 开始)没有一种方法可以在一次调用中批量删除许多 table。

Table 删除实际上是以异步方式完成的。客户端提交删除 table 的请求,并且 table 将在不久的将来某个时间被删除。问题在于执行删除 table 的调用后,客户端会等待 table 被删除。这种封锁完全是人为的,也是不必要的,但不幸的是,这就是目前的运作方式。

因为每个单独的 table 删除似乎都会阻塞,所以对 table 名称进行简单循环以连续删除它们不会很快完成。相反,您应该使用线程池,并并行发出 delete table 请求。

不过,批量删除 table 命令会非常有用。作为一个开源项目,我们非常欢迎对 issue tracker 的功能请求,以及对实现它的任何贡献,更是如此。

在 Accumulo shell 中,您可以使用 deletetable 命令的 -p 选项为要删除的 table 个名称指定正则表达式。

我会评论原始答案,但我缺乏声誉(第一次贡献就在这里)。

提供合法的正则表达式示例会很有帮助。

Accumulo shell 只能转义某些字符。特别是它不会转义方括号 []。如果要删除以字符串 "mytable" 开头的每个 table,否则合法的正则表达式命令具有以下 warning/error.

user@instance> deletetable -p mytable[.]*

2016-02-18 10:21:04,704 [shell.Shell] WARN : No tables found that match your criteria

user@instance> deletetable -p mytable[\w]*

2016-02-18 10:21:49,041 [shell.Shell] ERROR: org.apache.accumulo.core.util.BadArgumentException: can only escape single quotes, double quotes, the space character, the backslash, and hex input near index 19 deletetable -p mytable[\w]*

有效的 shell 命令是:

user@instance> deletetable -p mytable.*