如何使用雪花脚本连接文件名中的参数值?

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')