Snowflake cloud data platform 如何在snowflake db中安排每日sql脚本
如何安排雪花数据库中的sql脚本每天运行,并将输出文件名设置为包含当前日期。例如,如果代码今天运行,那么文件名应该是20200906*********.csv.gz,类似于明天的20200907*********.csv.gz。您可以使用雪花任务来安排SQL语句的执行。 任务可以执行单个SQL语句,包括对存储过程的调用。 任务根据指定的执行配置运行,使用设置的时间间隔和/或使用熟悉的cron实用程序语法子集的灵活计划的任意组合 对于您的目标,我将创建一个存储过程,以便您可以使用变量来管理更改的文件名和任何更复杂的事情 SF文件: 创建任务后,必须执行ALTER task…RESUME以启用它 使用“显示任务”检查任务的定义/配置,然后查询任务历史以检查执行情况 您的Snowflake JS存储过程可能如下所示: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实用程序语法子集的灵活计划的任意组合 对于您的目标,我将创建一个存储过程,以便您可以使用变量来管理更改的文
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;请看我答案中的示例