我有一个表有3000多个表,当我为所有表生成ddl时,它会给我一个错误“/user/hive argument list to long”。
我正在尝试编辑我的代码,先扫描前1000个,然后再扫描下1000个,然后再扫描剩余的1000个。这样,论点就可以分裂了。
这是我的密码:
hiveDBName=$1;
showcreate="show create table "
showpartitions="show partitions "
terminate=";"
tables=`hive -e "use $hiveDBName;show tables;"`
tab_list=`echo "${tables}"`
for list in $tab_list
do
echo "Generating table script for " #${hiveDBName}.${list}
showcreatetable=${showcreatetable}${showcreate}${hiveDBName}.${list}${terminate}
done
echo " ====== Create Tables ======= : "# $showcreatetable
#Creates a filter ddls
hive -e "use $hiveDBName; ${showcreatetable}"> a.sql
#Removes the Warn: from the file
grep -v "WARN" a.sql > /home/hive_ddls/${hiveDBName}_extract_all_tables.sql
echo "Removing Filter File"
#Remove Filter file
rm -f a.sql
# Puts a ; after each create table statement in the document
sed -i '/transient/s/$/;/' "/home/hive_ddls/${hiveDBName}_extract_all_tables.sql"
有没有什么方法可以在上面的脚本中放入for循环,这样它就可以将输出分成数千个部分来运行呢?
暂无答案!
目前还没有任何答案,快来回答吧!