#!/bin/bash
#转小写
typeset -l table_nm
table_nm=$1
#用法事例
usage(){
echo "USAGE: $0 db名.表名 [分区键=分区值]"
echo "EXAMPLE: $0 mreport_global.dim_food_area"
echo "EXAMPLE: $0 mreport_poultry.dmf_sales_order_detail op_month=202011"
exit 1
}
[ ${#@} -eq 0 ] && usage
#这里用cut -d -s的命令分隔db名和数据库名
hive_db=$(echo $table_nm | cut -d'.' -f1 -s)
hive_tb=$(echo $table_nm | cut -d'.' -f2 -s)
[ -z $hive_db ] || [ -z $hive_tb ] && usage
#如果没有分区,这里为空串
partition_key=$2
#这里我们将生产的mreport_global同步到测试的mreport_global2环境下(公司特殊需要)
hive_db_uat=$hive_db
if [[ $hive_db = "mreport_global" ]]
then
hive_db_uat=${hive_db}2
fi
#数据拷贝和数据修复
hadoop distcp -delete -skipcrccheck -update \
hdfs://dev/user/hive/warehouse/${hive_db}.db/${hive_tb}/${partition_key}\
hdfs://uat/user/hive/warehouse/${hive_db_uat}.db/${hive_tb}/${partition_key}
hive -e "msck repair table ${hive_db_uat}.${hive_tb}"
|