计算程序运行耗时

背景:需要对某个脚本进行补数任务,2020年7月-2021年3月底,因里面有同比、环比,不能并行执行,

且只能在非批量跑数时间(白天9点半-17:30)执行补数,为更好安排跑数时间,需知道补一天数据需执行多长时间(格式:*h*m*s)

方法:在shell脚本中添加程序耗时计算(如下三步骤)

--(1)原shell脚本

#!/bin/bash
# 1.获取开始、结束时间(获取当前时间)
timer_start=`date "+%Y-%m-%d %H:%M:%S"`
timer_end=`date "+%Y-%m-%d %H:%M:%S"`
# 2.计算时间差
duration=`echo $(($(date +%s -d "${timer_end}") - $(date +%s -d "${timer_start}"))) | awk '{t=split("60 s 60 m 24 h 999 d",a);for(n=1;n<t;n+=2){if($1==0)break;s=$1%a[n]a[n+1]s;$1=int($1/a[n])}print s}'`

# 3.打印开始、结束时间、耗时
echo "开始:$timer_start"
echo "结束:$timer_end"
echo "耗时:$duration"

--(2)添加至补数脚本中

 

#!/bin/bash
date1="$1"
date2="$2"

 

echo "date1:$date1"
echo "date2:$date2"

 

startdate=`date -d "-0 day $date1" +%Y%m%d`
enddate=`date -d "-0 day $date2" +%Y%m%d`

 

echo "startdate:$startdate"
echo "enddate:$enddate"

 

# 添加程序运行耗时0917
# 1.获取程序开始时间(获取当前时间)
timer_start=`date "+%Y-%m-%d %H:%M:%S"`

 

i=$startdate
while [[ $i < `date -d "+1 day $enddate" +%Y%m%d` ]]
do
echo $i

 


##a.sql 表跑数脚本

 

impala -f 实际脚本详细目录(绝对路径):如:/home/a.sql  --var=c_ds="`date -d "-0 day $i" +%Y-%m-%d`" --var=c_next_ds="`date -d "1 day $i" +%Y-%m-%d`"

 

i=`date -d "+1 day $i" +%Y%m%d`
done

 

# 2.获取程序结束时间(获取当前时间)
timer_end=`date "+%Y-%m-%d %H:%M:%S"`

 

# 3.计算时间差
duration=`echo $(($(date +%s -d "${timer_end}") - $(date +%s -d "${timer_start}"))) | awk '{t=split("60 s 60 m 24 h 999 d",a);for(n=1;n<t;n+=2){if($1==0)break;s=$1%a[n]a[n+1]s;$1=int($1/a[n])}print s}'`

 

# 4.打印开始、结束时间、时间差
echo "开始:$timer_start"
echo "结束:$timer_end"
echo "耗时:$duration"

 

--(3)实际跑数脚本  a.sql 中对该时间变量的应用

例如:

    select '${var:c_ds}' as stat_date

              ,o.name as name

      from  a 

    where to_date(a.reg_at) <= '${var:c_ds}' 

 

posted @ 2021-09-17 15:45  每天数据学习一点点  阅读(356)  评论(0)    收藏  举报