#!/bin/bash
############################################################################
#批量文件上传
#调用方法:sh upload_file_all.sh etl_date source_system odm_tab_name
############################################################################
etl_date=$1
source_system=$2
odm_tab_name=$3
etl_path=/data/script/edw/etlpath/
log_path=${etl_path}log/
bin_path=${etl_path}bin/
java_path=${etl_path}java/edwutil/data/
#拿掉源系统代码及左边的字符串
#source_system=CIF
#odm_tab_name=O_CIF_CLIENT
#echo ${odm_tab_name#*”${source_system}”_}
src_tab_name=`echo ${odm_tab_name#*”${source_system}”_}`
if [ ! -d ${log_path} ]; then
mkdir -p ${log_path}
fi
shlog()
{
local line_no msg
line_no=$1
msg=$2
echo “[main_to_bk.sh][$line_no][“`date “+%Y%m%d %H:%M:%S”`”] $msg “>> ${log_path}main_to_bk_${etl_date}.log
echo -e “\033[31;40;1m[main_to_bk.sh][$line_no][“`date “+%Y%m%d %H:%M:%S”`”] $msg \033[39;49;0m”
}
judge()
{
local line_no code tablename
line_no=$1
code=$2
tablename=$3
if [ $code -ne 0 ]; then
shlog ${line_no} ${tablename}”失败!!!”
exit 1
else
shlog ${line_no} ${tablename}”成功…”
fi
}
shlog $LINENO “———-开始从上传TXT文件和OK文件到文件接收服务器———-”
#计算该表在配置文件中的条数
tab_count=`grep ${odm_tab_name}” ” ${etl_path}conf/TAB.CFG | wc -l`
if [ ${tab_count} -eq 0 ]; then
shlog $LINENO “配置文件TAB.CFG中不存在${odm_tab_name}表,请检查……”
exit 1
elif [ ${tab_count} -gt 1 ]; then
shlog $LINENO “配置文件TAB.CFG中有多条${odm_tab_name}记录,请检查……”
exit 1
else
#每张表对应多个数据文件,需要循环多次对每个数据文件和对应的OK文件进行推送,如果有一个数据文件推送不通过则跳出循环,报错
tab_line=`grep ${odm_tab_name}” ” ${etl_path}conf/TAB.CFG`
#获取分区号
dfa_code=`echo ${tab_line} | awk -F” ” ‘{print $2}’`
#获取一共有几个空格
dcn_count=`echo “${tab_line}” | tr -cd ” ” | wc -c`
count=1
while(( ${count}<=${dcn_count} ))
do
echo $count
let “count++”
echo $count
echo ${tab_line}
#得到分区号
dcn_name=`echo ${tab_line} | awk -F” ” ‘{print $v}’ v=$count`
echo “dcn_name:”${dcn_name}
if [ ${dfa_code}”x” = “x” ]; then #数据文件不带dfa编号
src_file_name=${src_tab_name}’-‘${etl_date}
else
src_file_name=${src_tab_name}’-‘${dcn_name}’-‘${etl_date}
fi
echo ${src_file_name}
shlog $LINENO “———-开始推送${src_file_name}文件———-”
test -e ${java_path}${etl_date}/${src_file_name}.OK
#判断OK文件是否存在,不存在轮询判断
while [ $? = 1 ]
do
shlog $LINENO “${src_file_name}.OK标志文件不存在,开始轮询”
sleep 300
hadoop fs -test -e ${check_path}${src_file_name}.OK
done
sh ${bin_path}upload_file.sh ${etl_date} ${source_system} ${java_path}${etl_date}/${src_file_name}.OK ${log_path}
shlog $LINENO “———-上传OK文件到文件接收服务器结束———-”
test -e ${java_path}${etl_date}/${src_file_name}.TXT
#判断TXT标志文件是否存在,不存在轮询判断
while [ $? = 1 ]
do
shlog $LINENO “${src_file_name}.TXT标志文件不存在,开始轮询”
sleep 300
hadoop fs -test -e ${check_path}${src_file_name}.OK
done
sh ${bin_path}upload_file.sh ${etl_date} ${source_system} ${java_path}${etl_date}/${src_file_name}.TXT ${log_path}
done
fi
echo “exit_code:${exit_code}”
shlog $LINENO “———-上传TXT文件到文件接收服务器结束———-”