【问题标题】:Snowflake 'get' statement within stored procedure not working存储过程中的雪花'get'语句不起作用
【发布时间】:2021-08-17 13:50:27
【问题描述】:

问题陈述: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语句还是“stmt02.next();”失败了吗?
  • 它的'get'语句。当我检查雪花查询日志时,它显示已处理。绿色检查。
  • 好的 - 那么错误信息是什么?

标签: snowflake-cloud-data-platform java-stored-procedures


【解决方案1】:

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

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

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

【讨论】:

  • 'get' 语句在使用 snowsql 时有效,所以我认为连接器信息是通过某种方式传递的。最终目标是将本地驱动器的 get 语句替换为 s3 存储桶。
  • 您肯定需要从存储过程之外执行此操作。不管那个方法是什么......就像一个 API 一样......你可能会从 SP 使用外部函数调用它,但你可能还需要它与 SP 完全分离。就像,如果您从 SnowSQL 调用 SP,您可以执行 SP,然后将 GET 作为单独的步骤执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 2021-10-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多