zoukankan      html  css  js  c++  java
  • 自动截取sql并合并,生成执行HQL

    ### 提取SQL语句
    FILE_PATH="/data/SCRIPT"
    cat tables | while read file
    do
        echo "-----> ${file}"
        start=`grep -nEi "^insert|^with" ${FILE_PATH}/${file}|awk -F':' '{print $1}'|head -1`
        end=$((`grep -nEi "^exitCodeCheck" ${FILE_PATH}/${file}|awk -F':' '{print $1}'` - 2))
        sed -n "${start},${end}p" ${FILE_PATH}/${file}|sed 's/;$//g'
        echo ";"
    done > sql_script
    ### 生成语法测试
    FILE_PATH="/data/SCRIPT"
    cat tables | while read file
    do
        echo "-----> ${file}"
        start=`grep -nEi "^insert|^with" ${FILE_PATH}/${file}|awk -F':' '{print $1}'|head -1`
        end=$((`grep -nEi "^exitCodeCheck" ${FILE_PATH}/${file}|awk -F':' '{print $1}'` - 2))
        sed -n "${start},${end}p" ${FILE_PATH}/${file}|sed 's/;$//g'
        echo "limit 0"
        echo ";"
    done > sql_script_limit
    # 替换文件中的dos回车
    sed -i 's#^M$#
    #g' sql_script
    ### 文件dos 转 unix
    find . -type f|xargs -i dos2unix {}
    FILE_PATH="/home/userNmae/hive_data_init/"
    script="sql_script"
    run_script="run_${script}"
    cat /dev/null > ${run_script}
    for i in {'2018-02-28','2018-04-30','2018-06-30','2018-08-31','2018-09-03'}
    do
        etl_dt_start=${i}
        etl_dt_end=`date -d "1 days ${etl_dt_start}" +%Y-%m-%d`
        echo ${etl_dt_start} ${etl_dt_end}
        etl_dt=`echo ${etl_dt_start}|sed 's/-/_/g'`
        # etl_dt=`echo ${etl_dt_start_str:0:4}`;
        echo "use cmrh_dw;"                                         > ${script}_${etl_dt}
        echo "set hive.execution.engine=spark;"                    >> ${script}_${etl_dt}
        echo "set hive.exec.dynamic.partition=true;"               >> ${script}_${etl_dt}
        echo "set hive.exec.dynamic.partition.mode=nonstrict;"     >> ${script}_${etl_dt}
        echo "---------> ${etl_dt_start} ${etl_dt_end} <---------" >> ${script}_${etl_dt}
        echo "set hivevar:IncStartAll=${etl_dt_start};"            >> ${script}_${etl_dt}
        echo "set hivevar:IncEndAll=${etl_dt_end};"                >> ${script}_${etl_dt}
        echo "source ${FILEPATH}/${script};"                       >> ${script}_${etl_dt}
        echo "hive -v -f ${script}_${etl_dt}"                      >> ${run_script}
    done
    ### 修改版脚本
    ### script name: prod_init.sh
    tables=$1
    script=sql_str_${tables}
    run_script=run_${script}
    file_path=/data/etlscript/DB_NAME/SCRIPT/DWD/
    # 读取配置文件中的脚本名,提取相应脚本在生产环境中的SQL,合并成一个文件
    cat ${tables} | while read file
    do
        echo "-----> ${file}"
        start=`grep -nEi "^insert|^with" ${file_path}${file}|awk -F':' '{print $1}'|head -1`
        end=$((`grep -nEi "^exitCodeCheck" ${file_path}${file}|awk -F':' '{print $1}'` - 2))
        sed -n "${start},${end}p" ${file_path}${file}
        # |sed 's/;$//g'
        echo ";"
    done > ${script}
    
    cat /dev/null > ${run_script}
    #for day in {'2018-02-28','2018-04-30','2018-06-30','2018-08-31','2018-10-14'}
    # 读取日期配置文件中的日期,遍历生成批次执行脚本
    cat day_file|while read day
    do
        etl_dt_start=${day}
        etl_dt_end=`date -d "1 days ${etl_dt_start}" +%Y-%m-%d`
        # etl_dt_end=`date -d "1 months ${etl_dt_start}" +%Y-%m-%d`
        echo ${etl_dt_start} ${etl_dt_end}
        etl_dt_start_str=`echo ${etl_dt_start}|sed 's/-/_/g'`
        echo "set hive.exec.dynamic.partition=true;"                  > ${script}_${etl_dt_start_str}
        echo "set hive.exec.dynamic.partition.mode=nonstrict;"       >> ${script}_${etl_dt_start_str}
        echo "set hive.execution.engine=spark;"                      >> ${script}_${etl_dt_start_str}
        echo "use cmrh_dw;"                                          >> ${script}_${etl_dt_start_str}
        # etl_dt_start_str=`echo ${etl_dt_start}|sed 's/-/_/g'`
        # etl_dt_start_str=`echo ${etl_dt_start_str:0:4}`;
        echo "---------> ${etl_dt_start} ${etl_dt_end} <---------" >> ${script}_${etl_dt_start_str}
        echo "set hivevar:IncStartAll=${etl_dt_start};"            >> ${script}_${etl_dt_start_str}
        echo "set hivevar:IncEndAll=${etl_dt_end};"                >> ${script}_${etl_dt_start_str}
        echo "source ${script}"                                    >> ${script}_${etl_dt_start_str}
        echo "hive -v -f ${script}_${etl_dt_start_str} > ${script}_${etl_dt_start_str}_log 2>&1 &" >> ${run_script}
    done
    EOF
  • 相关阅读:
    SQLSERVER 2012之AlwaysOn -- 一次硬件升级引发的问题
    SQLSERVER 2012之AlwaysOn -- 同步模式下的网卡性能优化
    Replication的犄角旮旯(九)-- sp_setsubscriptionxactseqno,赋予订阅活力的工具
    关于X锁的问题--由select+X锁是否持有到事务结束的误区
    SQLServer 2012之AlwaysOn —— 指定数据同步链路,消除网络抖动导致的提交延迟问题
    Replication的犄角旮旯(八)-- 订阅与发布异构的问题
    Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)
    JavaScript 学习笔记 -- String.trim + format
    SQL笔记
    SQL笔记
  • 原文地址:https://www.cnblogs.com/chenzechao/p/9591205.html
Copyright © 2011-2022 走看看