如何使用雪花脚本连接文件名中的参数值?
How to concat the parameter value in the file name using snowflake scripting?
我正在尝试将参数值与文件名连接起来。我将 sysdate 作为参数传递,当我 call sp_demo
时,我将值作为字符串 sp_demo('20220429')
。它不起作用。
我猜它没有正确捕获日期值。雪花脚本是新事物。
create or replace procedure sp_demo(sysdate varchar)
returns varchar not null
language sql
execute as caller
as
$$
begin
copy into stg.tb_demo (name, id, address)
from @stg.demo_stage/DEMO.:sysdate.psv.gz
file_format = (format_name = 'stg.demo_ff',
error_on_column_count_mismatch = true, encoding = 'iso-8859-1');
end;
$$;
不是完整的解决方案,但您可以捕获指令,然后 运行 那。
我没有有意义的文件要复制,所以我转向尝试使用 LIST 来显示文件在那里,等等。
create or replace procedure sp_demo(sysdate varchar)
returns varchar not null
language sql
as
$$
begin
let sql text := 'list @~'||:sysdate;
let res resultset := (execute immediate :sql);
end;
$$;
尽管如此,LIST 结果并不是可捕获的东西..
所以你的代码:
create or replace procedure sp_demo(sysdate varchar)
returns varchar not null
language sql
as
$$
begin
let sql text := 'copy into stg.tb_demo(name, id, address) from @stg.demo_stage/DEMO.' || :sysdate || '.psv.gz file_format = (format_name = ''stg.demo_ff'', error_on_column_count_mismatch = true, encoding = ''iso-8859-1'')';
return sql;
--execute immediate :sql;
end;
$$;
call sp_demo('1234');
给出:
copy into stg.tb_demo(name, id, address) from @stg.demo_stage/DEMO.1234.psv.gz file_format = (format_name = 'stg.demo_ff', error_on_column_count_mismatch = true, encoding = 'iso-8859-1')
我正在尝试将参数值与文件名连接起来。我将 sysdate 作为参数传递,当我 call sp_demo
时,我将值作为字符串 sp_demo('20220429')
。它不起作用。
我猜它没有正确捕获日期值。雪花脚本是新事物。
create or replace procedure sp_demo(sysdate varchar)
returns varchar not null
language sql
execute as caller
as
$$
begin
copy into stg.tb_demo (name, id, address)
from @stg.demo_stage/DEMO.:sysdate.psv.gz
file_format = (format_name = 'stg.demo_ff',
error_on_column_count_mismatch = true, encoding = 'iso-8859-1');
end;
$$;
不是完整的解决方案,但您可以捕获指令,然后 运行 那。
我没有有意义的文件要复制,所以我转向尝试使用 LIST 来显示文件在那里,等等。
create or replace procedure sp_demo(sysdate varchar)
returns varchar not null
language sql
as
$$
begin
let sql text := 'list @~'||:sysdate;
let res resultset := (execute immediate :sql);
end;
$$;
尽管如此,LIST 结果并不是可捕获的东西..
所以你的代码:
create or replace procedure sp_demo(sysdate varchar)
returns varchar not null
language sql
as
$$
begin
let sql text := 'copy into stg.tb_demo(name, id, address) from @stg.demo_stage/DEMO.' || :sysdate || '.psv.gz file_format = (format_name = ''stg.demo_ff'', error_on_column_count_mismatch = true, encoding = ''iso-8859-1'')';
return sql;
--execute immediate :sql;
end;
$$;
call sp_demo('1234');
给出:
copy into stg.tb_demo(name, id, address) from @stg.demo_stage/DEMO.1234.psv.gz file_format = (format_name = 'stg.demo_ff', error_on_column_count_mismatch = true, encoding = 'iso-8859-1')