在 Hive 中循环遍历 table 名称

Loop through table name in Hive

我正在尝试遍历 table 名称并将 table 架构导出为 .csv 文件。 这是我的 shell 脚本:

#!/bin/bash
## declare an array variable
declare -a array=("table1"
                  "table2")

# get length of an array
arraylength=${#array[@]}

# use for loop to read all values and indexes
for (( i=0; i<${arraylength}; i++ ));
do
  echo "index: $i, value: ${array[$i]}"
  hive -e $('DESCRIBE FORMATTED ${array[$i]') | sed 's/[\t]/,/g' > /tmp/${array[$i]}.csv
done

但是我得到了这个错误:

test.sh: line 14: DESCRIBE FORMATTED ${array[$i]: command not found
Missing argument for option: e

有什么建议吗?

问题在这里:

hive -e $('DESCRIBE FORMATTED ${array[$i]') | sed 's/[\t]/,/g' > /tmp/${array[$i]}.csv

命令替换 $() 执行 shell 命令但 DESCRIBE 不是 shell 命令。 还缺少大括号 }

固定:

hive -e "DESCRIBE FORMATTED ${array[$i]};" | sed 's/[\t]/,/g' > /tmp/${array[$i]}.csv

查看类似命令的示例:

你可能需要使用 $(command) 以防你想要将命令结果放入变量中,例如:

count=$(hive -e "select count(*) from mytable")

在您的情况下,您不需要 $() 命令替换。