snowflake-cloud-data-platform - 在 Snowflake UDF 中查询“list stage”
问题描述
我正在尝试编写一个 Snowflake UDF,它接受阶段名称和特定文件夹名称作为输入参数,并返回最新的文件 ID(从完整文件名中剥离)作为输出。谁能帮助我用一个简单的代码来实现这一点?
解决方案
我不确定您是否需要 UDF 或存储过程。创建的语法类似,所以我认为这会有所帮助。这是一个存储过程,它将从给定的阶段和路径获取最新的暂存文件。请注意limit 1
in 查询,多个暂存文件可能共享相同的上次修改日期,而此过程返回标量(单个)值。
存储过程定义
create or replace procedure "MYDB"."MYSCHEMA"."LATEST_STAGED_FILE"(stage_name text, folder text)
returns string not null
language javascript
execute as caller
as
$$
var sql_text = "list @" + STAGE_NAME + "/" + FOLDER ;
var sql_command0 = snowflake.createStatement({ sqlText: sql_text});
var sql_command1 = snowflake.createStatement({ sqlText:`SELECT "name" FROM table(result_scan(last_query_id())) WHERE "last_modified" = (select MAX("last_modified") from table(result_scan(last_query_id()))) LIMIT 1;`});
try {
sql_command0.execute();
var resultSet = sql_command1.execute();
while(resultSet.next())
{
var resultFile = resultSet.getColumnValue('name').split("/")
return resultFile[resultFile.length - 1]
}
}
catch (err) {
return "Failed: " + err;
}
$$;
然后,您可以调用存储过程,如
call "MYDB"."MYSCHEMA"."LATEST_STAGED_FILE"('MYDB.MYSCHEMA.MYSTAGE', 'mypath/myotherpath');
参考
推荐阅读
- php - 搜索 pdf 文件
- c# - Azure 无法访问存储在应用服务配置中的连接字符串
- javascript - 如何在 puppeteer 中获得通过或失败的测试用例名称
- python - 将 Django 部署到 Heroku (TemplateDoesNotExist)
- docker - 尝试在代理服务器后面的 IBM Cloud VM 中拉取 docker 映像时出错
- google-cloud-platform - 在 GCS Bucket 中设置 x 帧选项标头
- javascript - 使用 Javascript 将英文数字转换为阿拉伯文本
- angular - 使用茉莉花测试单选按钮上的选中属性
- php - 如何计算php中的最后一列
- sql - SQL:在一张表中查找一对多