【问题标题】:Requirement to schedule a job the same date of every month要求在每个月的同一日期安排工作
【发布时间】:2014-11-09 10:00:18
【问题描述】:

我提供了一个 Teradata 脚本 (.sql),其中几乎没有代码位置为“mmyy”、“yyyymmdd”、stamp_dt。要求是我想在每个月的第 30 天运行这个脚本。我需要在 UNIX 中自动化这个过程。 为此,首先我需要在 SQL 脚本中多写几行以确保日​​期格式。在这里做什么?

到目前为止,我已经在 SQL 程序的顶部添加了以下几行。

#! /bin/ksh

# MONTH END DATE, IN FORMAT YYYY-MM-DD

END_DT=$1

ECHO END DATE IS $END_DT

TODAY1=$(date +%Y%m%d%H%M)

但是,在其他几个地方我有MMYY。在这种情况下该怎么办? 我如何每次添加一个月?这里很困惑!

部分代码如下:

create multiset  table udxx.hh000_bank_loan_customer_?mmyy as (
sel acct_num, dept,
case when Total_Amt > 500000
then 'R'
else cus_ind
end as cus_lod
from 
hh000_bank_loan_customer a
left join (sel dept_id, type, number from bank_loan) as b
on a.id = b. dept_id
) with data 
primary index (ACCT_ID);
collect stats on udxx.hh000_bank_loan_customer_?mmyy  index(LOAN_ACCT_ID);

我需要如何修改上面出现“mmyy”的代码块,以便我以后每个月在 unix 的 ksh 脚本中进行安排。

我需要在 sql 程序中给 Addmonths 吗??

【问题讨论】:

    标签: sql unix scheduling ksh teradata


    【解决方案1】:

    我只用 unix 做这种事情

    day_of_month=$(date +%d)
    
    if(( day_of_month == 10 ))
    then
    code goes here
    fi
    

    二月份你打算做什么?

    编辑从这里开始

    关于替换脚本中字符串的要求,你可以做这种事情。

    $start_of_month="outside the scope of my answer"
    sed "s/start_of_month/$start_of_month/g" original_script > script_for_this_month
    script_for_this_month
    

    【讨论】:

    • 你是绝对正确的。但是,在 unix 中执行这项工作之前,我确实需要根据日期格式修改 teradata 脚本。
    • 我不太明白这一点。假设我需要在 2014 年 7 月 30 日运行,并且我想每个月运行 30 日。在我的 sql 查询中,当它说“snapdate”时,当我在 teradata 中运行时,它提示输入快照日期,我输入“20140730”,再次提示输入 mmyy,我输入 0730,我应该先修复它,然后再安排,正确??
    • 如果您打算将此作为计划作业运行,则必须摆脱所有提示。
    • 没错。我的问题是关于如何摆脱sql代码中的这些提示?
    【解决方案2】:

    unix/linux 中的 Cron 是您可能需要的。让系统担心调度您的脚本。

    http://en.wikipedia.org/wiki/Cron

    【讨论】:

    • 同意。但是,我说的是在 unix 中调度之前的步骤。如果我的 sql 程序在很多地方都有 ?mmyy、?snap_dt,我无法在 unix 中复制、粘贴和安排。我确实需要使用几个日期函数来更改它们,但我在其中很差。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2011-03-15
    • 2021-10-24
    • 2023-02-15
    • 1970-01-01
    相关资源
    最近更新 更多