微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

存储过程中的雪花“get”语句不起作用

如何解决存储过程中的雪花“get”语句不起作用

问题说明:sNowflake 'get' 语句在雪花存储过程中不起作用。

CREATE OR REPLACE PROCEDURE SP_UNLOAD_DYNAMIC("prefix" varchar)
    RETURNS varchar(1000)
    LANGUAGE JAVASCRIPT
    EXECUTE AS CALLER
    AS
    $$
    var result  = "";

    try {
            
        var sql00   = "select concat('" + prefix + "',to_char(ts,'yyyymmddhh24miss'),'.txt') from ts";
        var stmt00  = sNowflake.execute({ sqlText:sql00 });
        stmt00.next();
        var rs = stmt00.getColumnValue(1);
        
        var sql01   = "copy into @my_unload_stage/unload/" + rs + " from tmp_dedupe header=false single=true max_file_size=4900000000 overwrite=true;"
        var stmt01  = sNowflake.execute({ sqlText:sql01 });
        stmt01.next();
           
        var sql02   = 'get @my_unload_stage file://D:\\project_x\\OutputFiles_STG\\';        
        var stmt02  =  sNowflake.execute({ sqlText:sql02 });
        stmt02.next();
        
        result = rs;
        
    }
     
    catch (err)  {
        result =  "Failed: Code: " + err.code + "\n  State: " + err.state;
        result += "\n  Message: " + err.message;
        result += "\nStack Trace:\n" + err.stackTraceTxt; 
    }
     
    return result;
    $$;

在 stmt02 之前一切似乎都有效。 get 语句在sNowsql 中有效,但在存储过程中无效。

想法,并在此先感谢您。

-伊比

解决方法

我认为您不能从存储过程中执行 GET 语句。您会要求 Snowflake 联系客户并将文件移动到该客户。 Snowflake VWH 怎么知道客户要去哪里做这件事?

为了完成您正在做的事情,我相信您需要创建一个外部应用程序,该应用程序利用支持 GET 的雪花连接器之一,例如 Python、JDBC、ODBC 等,然后也许在 Lambda 或 Azure 函数中公开它。然后,您可以通过雪花存储过程中的雪花外部函数调用该 API。

https://docs.snowflake.com/en/sql-reference/external-functions.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。