代码之家  ›  专栏  ›  技术社区  ›  Scott Grammilo

如何在crontab中安排Teradata查询?

  •  0
  • Scott Grammilo  · 技术社区  · 5 年前

    我的工作要求我每天刷新某些Teradata表。我遇到了crontab,并试图安排一个小型Teradata查询。以下是代码:

    DROP TABLE S_BNKFRD.PV_TEMP;
    CREATE TABLE S_BNKFRD.PV_TEMP AS
    (
    SELECT
    Current_Time AS Curr_Time
    )WITH DATA;
    

    Crontab:

    * * * * * cd && . ./.profile;BTEQ -p /DATA/home/pverma3/CronTab_Test_Piyush.sql
    

    Teradata查询位于 CronTab_Test_Piyush.sql

    我搜索了一下,但找不到crontab的确切语法。相反,我发现人们在谈论BTEQ,所以尝试一下。(我的同事正在用BGsas代替BTEQ运行一个SAS文件,但是我们很快就要摆脱SAS了,所以我想用Teradata来实现它)

    请帮忙。非常感谢你。

    0 回复  |  直到 5 年前
        1
  •  2
  •   JNevill    5 年前

    我更喜欢创建一个shell脚本,在这个shell脚本中,把我的bteq写成一个heredoc:

    #!/bin/bash
    
    bteqSYSTEM="your teradata domain name or ip"
    bteqUSER="your teradata username"
    bteqPWD="your teradata password"
    
    bteq <<- BTEQSCRIPT 1> /DATA/home/pverma3/bteq_output.log
            .LOGON ${bteqSYSTEM}/${bteqUSER},${bteqPWD}
            DROP TABLE S_BNKFRD.PV_TEMP;
            CREATE TABLE S_BNKFRD.PV_TEMP AS
            (
            SELECT
            Current_Time AS Curr_Time
            )WITH DATA;
            .LOGOFF
            .QUIT
    BTEQSCRIPT
    

    #call my script every day at 1am
    0 1 * * * /bin/bash /path/to/this/script.sh
    

    如果要保留现有的SQL文件并从bteq脚本中引用它,可以执行以下操作:

    #!/bin/bash
    
    bteqSYSTEM="your teradata domain name or ip"
    bteqUSER="your teradata username"
    bteqPWD="your teradata password"
    
    bteq <<- BTEQSCRIPT 1> /DATA/home/pverma3/bteq_output.log
            .LOGON ${bteqSYSTEM}/${bteqUSER},${bteqPWD}
            .RUN FILE=/DATA/home/pverma3/CronTab_Test_Piyush.sql;
            .LOGOFF
            .QUIT
    BTEQSCRIPT
    

    您还可以考虑将该sql放入存储过程中,然后从bteq调用该过程。通过这种方式,您可以将所有sql都从命令行中删除,因为在命令行中编辑sql有点困难。