工作中遇到需要表结构但是公司人员更新迭代,早就找不到创表语句,怎么办呢?
通过一下脚本可以实现自动生成创表语句,可以自动把一个库下的所有表或者指定的几个表导出来。
参数说明:参数1:库名,参数2-参数n:表名。例如:./test.sh ods table_name1 table_name2 table_name3。如果table_name不写,默认库下所有的表"。
脚本是作者花了几个小时调试出来的,如果有需要可以关注一下作者,也是对本人的一种肯定,谢谢!
#!/bin/bash
DATABASE=$1
arr=($@)
rm -r -f ${DATABASE}_creat_tables.sql
show_table(){
echo "参数1:库名是${DATABASE}"
for ((i=1;i<${#arr[@]};i++))
do
echo "参数$((i+1)):输入表名是${arr[i]}"
done
}
if [ $# -eq 1 ];then
show_table
arr_table=`hive -e "use ${DATABASE};show tables;"`
arr_table=($arr_table)
for ((i=1;i<${#arr_table[@]};i++))
do
hive -e "use ${DATABASE}; show create table ${arr_table[i]};" >> ${DATABASE}_creat_tables.sql
done
# 使用以下方式读取的优势是解决shell容量问题
# hive -e "use ${DATABASE};show tables;" > tables.tmp
# cat tables.tmp | while read eachline
# do
# echo "----------------------------正在创建 table ${eachline}----------------------------"
# hive -e "use ${DATABASE}; show create table ${eachline};" >> ${DATABASE}_creat_tables.sql
# done
elif [ $# -gt 1 ];then
show_table
for ((i=1;i<${#arr[@]};i++))
do
echo "----------------------------正在创建 table ${arr[i]}----------------------------"
hive -e "use ${DATABASE}; show create table ${arr[i]};" >> ${DATABASE}_creat_tables.sql
done
else
echo "请输入正确的参数,参数1:库名,参数2-参数n:表名。例如:./test.sh ods table_name1 table_name2 table_name3。table_name不写的话,默认库下所有的表"
fi
exit 0
#不能使用for((i=1;i<=$#;i++))遍历,因为i已经被赋值了$i是取实际i的值。也不能使用 for in ,因为是从第二个参数开始的