在 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")
在您的情况下,您不需要 $() 命令替换。
我正在尝试遍历 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")
在您的情况下,您不需要 $() 命令替换。