Snowflake cloud data platform 雪花阶段的动态文件路径
我正在将数据从雪花表复制到S3外部阶段: 从复制到“@my_stage/my_folder/my_file.csv.gz” 挑选* 从我的桌子上 但是,这段代码每天都在运行,我不想覆盖我的_file.csv.gz,而是保留所有历史版本。但是,我还没有找到创建动态路径的方法: 设置stage_name=CONCAT'@my_stage/my_folder/my_file',''u date.csv.gz'; 从复制到$stage\u name 挑选* 从我的桌子上 ; 从复制到标识符$stage\u name 挑选* 从我的桌子上 ; 后面的两个查询都不起作用!Snowflake cloud data platform 雪花阶段的动态文件路径,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我正在将数据从雪花表复制到S3外部阶段: 从复制到“@my_stage/my_folder/my_file.csv.gz” 挑选* 从我的桌子上 但是,这段代码每天都在运行,我不想覆盖我的_file.csv.gz,而是保留所有历史版本。但是,我还没有找到创建动态路径的方法: 设置stage_name=CONCAT'@my_stage/my_folder/my_file',''u date.csv.gz'; 从复制到$stage\u name 挑选* 从我的桌子上 ; 从复制到标识符$stage\
我的问题:如何在Snowflake中创建动态舞台路径?谢谢这行不通。不幸的是,为标识符使用变量对阶段不起作用。您可能需要使用动态SQL创建存储过程:
因此,您可以每天调用此过程,或者为path阶段、将要执行的查询和目标文件名生成具有多个参数的SP。这不起作用。不幸的是,为标识符使用变量对阶段不起作用。您可能需要使用动态SQL创建存储过程:
因此,您可以每天调用此过程,也可以为path阶段、将要执行的查询和目标文件名生成一个包含多个参数的SP。这是一个可以使用和修改的存储过程。请注意,用于修改copy into语句的注释行使用反勾号,而不是单引号或双引号。在JavaScript中,允许在字符串中使用单引号或双引号、多行常量和${variable_name}形式的替换标记
create or replace procedure COPY_TO_STAGE(PATH string)
returns variant
language javascript
as
$$
class Query{
constructor(statement){
this.statement = statement;
}
}
// Start of main function
var out = {};
// Change your copy into statement here.
var q = getQuery(`copy into '${PATH}' from (select * from my_table);`);
if (q.resultSet.next()) {
out["rows_unloaded"] = q.resultSet.getColumnValue("rows_unloaded");
out["input_bytes"] = q.resultSet.getColumnValue("input_bytes");
out["output_bytes"] = q.resultSet.getColumnValue("output_bytes");
} else {
out["Error"] = "Unknown error";
}
return out;
// End of main function
function getQuery(sql){
cmd1 = {sqlText: sql};
var query = new Query(snowflake.createStatement(cmd1));
query.resultSet = query.statement.execute();
return query;
}
$$;
定义后,如果需要,可以使用SQL变量作为输入:
SET stage_name=CONCAT('@my_stage/my_folder/my_file', '_date.csv.gz');
call copy_to_stage($stage_name);
这是一个可以使用和修改的存储过程。请注意,用于修改copy into语句的注释行使用反勾号,而不是单引号或双引号。在JavaScript中,允许在字符串中使用单引号或双引号、多行常量和${variable_name}形式的替换标记
create or replace procedure COPY_TO_STAGE(PATH string)
returns variant
language javascript
as
$$
class Query{
constructor(statement){
this.statement = statement;
}
}
// Start of main function
var out = {};
// Change your copy into statement here.
var q = getQuery(`copy into '${PATH}' from (select * from my_table);`);
if (q.resultSet.next()) {
out["rows_unloaded"] = q.resultSet.getColumnValue("rows_unloaded");
out["input_bytes"] = q.resultSet.getColumnValue("input_bytes");
out["output_bytes"] = q.resultSet.getColumnValue("output_bytes");
} else {
out["Error"] = "Unknown error";
}
return out;
// End of main function
function getQuery(sql){
cmd1 = {sqlText: sql};
var query = new Query(snowflake.createStatement(cmd1));
query.resultSet = query.statement.execute();
return query;
}
$$;
定义后,如果需要,可以使用SQL变量作为输入:
SET stage_name=CONCAT('@my_stage/my_folder/my_file', '_date.csv.gz');
call copy_to_stage($stage_name);
我相信你只能通过存储过程来实现这一点:我相信你只能通过存储过程来实现这一点:谢谢Greg!谢谢格雷格!