对hive中的表进行批量处理,如下是一个简单的脚本
#给定一个hive数据库名,生成它的所有表的create SQL语句,并导出到文件 create_fun(){ hive -e "show create table $1.$2">>$3 } #显示一个表中所有的分区 show_partitions(){ hive -e "show partitions $1.$2 ;">>$3 } #将一个表中所有分区重命名 rename_partition(){ start_day=$3 end_day=$4 while [ ${start_day} -le ${end_day} ] do day_int=`date +"%Y%m%d" -d "${start_day}"` day_str=`date +"%Y-%m-%d" -d "${start_day}"` hive -e "alter table $1.$2 PARTITION (dt='${day_int}') RENAME TO PARTITION (dt='${day_str}');" start_day=`date +"%Y%m%d" -d "${start_day} 1 days" ` done } #删除一个表中的分区 drop_partition(){ hive -e "alter table $1.$2 drop PARTITION (dt='$3')" } #更新一个hive表的列分隔符 modify_separator(){ hive -e "alter table $1.$2 set SERDEPROPERTIES('field.delim'=' 01');" } #指定一个数据库,查询出所有table,并对符合条件的table进行处理 database(){ basename=$1 mid_file=mid.txt result_file=${basename}.txt match=_ods hive -e "use ${basename};show tables">${mid_file} sed -i '/WARN/d' ${mid_file} cat ${mid_file} |grep ${match} |while read line do drop_partition ${basename} $line $2 done rm -rf ${mid_file} } #program start # database $1 $2