Snowflake cloud data platform 如何在snowflake db中安排每日sql脚本

Snowflake cloud data platform 如何在snowflake db中安排每日sql脚本,snowflake-cloud-data-platform,snowflake-schema,snowflake-task,snowsql,Snowflake Cloud Data Platform,Snowflake Schema,Snowflake Task,Snowsql,如何安排雪花数据库中的sql脚本每天运行,并将输出文件名设置为包含当前日期。例如,如果代码今天运行,那么文件名应该是20200906*********.csv.gz,类似于明天的20200907*********.csv.gz。您可以使用雪花任务来安排SQL语句的执行。 任务可以执行单个SQL语句,包括对存储过程的调用。 任务根据指定的执行配置运行,使用设置的时间间隔和/或使用熟悉的cron实用程序语法子集的灵活计划的任意组合 对于您的目标,我将创建一个存储过程,以便您可以使用变量来管理更改的文

如何安排雪花数据库中的sql脚本每天运行,并将输出文件名设置为包含当前日期。例如,如果代码今天运行,那么文件名应该是20200906*********.csv.gz,类似于明天的20200907*********.csv.gz。

您可以使用雪花任务来安排SQL语句的执行。 任务可以执行单个SQL语句,包括对存储过程的调用。 任务根据指定的执行配置运行,使用设置的时间间隔和/或使用熟悉的cron实用程序语法子集的灵活计划的任意组合

对于您的目标,我将创建一个存储过程,以便您可以使用变量来管理更改的文件名和任何更复杂的事情

SF文件:

创建任务后,必须执行ALTER task…RESUME以启用它

使用“显示任务”检查任务的定义/配置,然后查询任务历史以检查执行情况

您的Snowflake JS存储过程可能如下所示:

create or replace procedure SP_TASK_EXPORT()
    RETURNS VARCHAR(256) NOT NULL
    LANGUAGE JAVASCRIPT
    EXECUTE AS CALLER
as $$    

function getToday_yyyymmdd()
{
    var v_out_Today;
    rs = snowflake.execute ( { sqlText: `SELECT to_char(current_date,'yyyymmdd');` }  );
    if( rs.next())
    {
       v_out_Today = rs.getColumnValue(1); // get current date as yyyymmdd
    }

    return v_out_Today; 
}   

  var result = new String('Successfully Executed');
  var v_Today = getToday_yyyymmdd();

  try {
       
    var sql_command = `copy into @unload_gcs/LH_TBL_FIRST` + v_Today + `.csv.gz from ........`;
 
    var stmt = snowflake.createStatement({sqlText: sql_command});
    var res = stmt.execute();
     
    
   }
    catch (err) {
    result =  "Failed: Code: " + err.code + " | State: " + err.state;
    result += "\n  Message: " + err.message;
    result += "\nStack Trace:\n" + err.stackTraceTxt; 

  } 

 return result;

  $$;
在创建任务并计划它之前,请测试调用它的存储过程:

调用SP_任务_导出

您可以使用雪花任务来安排SQL语句的执行。 任务可以执行单个SQL语句,包括对存储过程的调用。 任务根据指定的执行配置运行,使用设置的时间间隔和/或使用熟悉的cron实用程序语法子集的灵活计划的任意组合

对于您的目标,我将创建一个存储过程,以便您可以使用变量来管理更改的文件名和任何更复杂的事情

SF文件:

创建任务后,必须执行ALTER task…RESUME以启用它

使用“显示任务”检查任务的定义/配置,然后查询任务历史以检查执行情况

您的Snowflake JS存储过程可能如下所示:

create or replace procedure SP_TASK_EXPORT()
    RETURNS VARCHAR(256) NOT NULL
    LANGUAGE JAVASCRIPT
    EXECUTE AS CALLER
as $$    

function getToday_yyyymmdd()
{
    var v_out_Today;
    rs = snowflake.execute ( { sqlText: `SELECT to_char(current_date,'yyyymmdd');` }  );
    if( rs.next())
    {
       v_out_Today = rs.getColumnValue(1); // get current date as yyyymmdd
    }

    return v_out_Today; 
}   

  var result = new String('Successfully Executed');
  var v_Today = getToday_yyyymmdd();

  try {
       
    var sql_command = `copy into @unload_gcs/LH_TBL_FIRST` + v_Today + `.csv.gz from ........`;
 
    var stmt = snowflake.createStatement({sqlText: sql_command});
    var res = stmt.execute();
     
    
   }
    catch (err) {
    result =  "Failed: Code: " + err.code + " | State: " + err.state;
    result += "\n  Message: " + err.message;
    result += "\nStack Trace:\n" + err.stackTraceTxt; 

  } 

 return result;

  $$;
在创建任务并计划它之前,请测试调用它的存储过程:


调用SP_任务_导出

您能告诉我如何在文件名中包括日期吗?正如我在问题中提到的。提前感谢。请分享您的SQL脚本,以了解它是如何工作的。谢谢,请找到下面的脚本。在20200902位置,我希望每天都有相同格式的日期。例如,如果脚本今天运行,那么文件名将是LH_TBL_FIRST20200906。从select*from TEST\u BASE.LH\u TBL\u FIRST file\u format=type=csv compression=“gzip”FIELD\u DELIMITER=”,“FIELD\u可选地围起来\u by=”NULL\u IF=EMPTY\u FIELD\u AS\u NULL=FALSE single=FALSE max\u file\u size=5300000000 header=FALSE;请你告诉我如何在文件名中包含日期,正如我在问题中提到的。提前感谢。请分享您的SQL脚本,以了解它是如何工作的。谢谢,请找到下面的脚本。在20200902位置,我希望每天都有相同格式的日期。例如,如果脚本今天运行,那么文件名将是LH_TBL_FIRST20200906。从select*from TEST\u BASE.LH\u TBL\u FIRST file\u format=type=csv compression=“gzip”FIELD\u DELIMITER=”,“FIELD\u可选地围起来\u by=”NULL\u IF=EMPTY\u FIELD\u AS\u NULL=FALSE single=FALSE max\u file\u size=5300000000 header=FALSE;请看我答案中的示例