问题语句: snowflake 'get‘语句在snowflake存储过程中不起作用。
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中起作用,但在存储过程中不起作用。
想一想,提前谢谢你。
-ibby
发布于 2021-05-30 13:22:36
我认为您不能从存储过程中执行GET语句。您将请求Snowflake联系一个客户端,并将一个文件移动到该客户端。Snowflake VWH如何知道客户端将在哪里执行此操作?
为了做你正在做的事情,我相信你需要创建一个外部应用程序,它利用支持GET的雪花连接器之一,比如Python、JDBC、ODBC等,然后可能在Lambda或Azure函数中公开它。然后,您可以在Snowflake存储过程中通过Snowflake外部函数调用该API。
https://docs.snowflake.com/en/sql-reference/external-functions.html
https://stackoverflow.com/questions/67753690
复制相似问题