#!/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文件到文件接收服务器结束———-”
    
   
 
