将所有 hbase table 名称保存到 bash 数组

Save all hbase table names to the bash array

我想将所有 hbase 表的名称存储在我的 bash 脚本中的一个数组中。

  1. 所有 sed 修补程序都可以接受。
  2. 所有更好的解决方案(比如 readarray 它来自我不知道的一些 zookeeper 文件)都是可以接受的

我有两个名为 MY_TABLE_NAME_1MY_TABLE_NAME_2 的 hbase 表,所以我想要的是:

tables = (
  MY_TABLE_NAME_1
  MY_TABLE_NAME_2
)

我尝试了什么:

基于HBase Shell in OS Scripts by Cloudera

echo "list" | /path/to/hbase/bin/hbase shell -n > /home/me/hbase-tables
readarray -t tables < /home/me/hbase-tables

但在我的 /home/me/hbase-tables 里面是:

MY_TABLE_NAME_1
MY_TABLE_NAME_2
2 row(s) in 0.3310 seconds

MY_TABLE_NAME_1
MY_TABLE_NAME_2

您可以使用 readarray/mapfile 就好了。但是要删除 duplicates/skip 空行并删除不必要的字符串,您需要使用 awk.

的过滤器

此外,您不需要创建临时文件然后解析该文件,而是直接使用一种称为进程替换的技术,它允许命令的输出可用,就好像它在临时文件中可用一样

mapfile -t output < <(echo "list" | /path/to/hbase/bin/hbase shell -n | awk '!unique[[=10=]]++ && !/seconds/ && NF')

现在数组将只包含来自 hbase 输出的唯一 table 名称。也就是说,您真的应该查找解决方案以消除查询输出中的噪音,而不是 post-以这种方式处理它。