snowflake-cloud-data-platform - 将数据从雪花卸载到 s3 时,如何将日期时间戳添加到 zip 文件?
问题描述
我希望能够为我正在写入 s3 的文件名添加时间戳。到目前为止,我已经能够使用下面的示例将文件写入 AWS S3。有人可以指导我如何将日期时间戳放在文件名中吗?
copy into @s3bucket/something.csv.gz
from (select * from mytable)
file_format = (type=csv FIELD_OPTIONALLY_ENCLOSED_BY = '"' compression='gzip' )
single=true
header=TRUE;
提前致谢。
解决方案
在语句的阶段或位置部分定义路径的语法COPY INTO
不允许函数在 SQL 中动态定义它。
但是,您可以使用存储过程来完成构建动态查询,使用JavaScript 日期 API和一些字符串格式。
这是您的用例的一个非常简单的示例,其中一些代码改编自另一个问题:
CREATE OR REPLACE PROCEDURE COPY_INTO_PROCEDURE_EXAMPLE()
RETURNS VARIANT
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS
$$
var rows = [];
var n = new Date();
// May need refinement to zero-pad some values or achieve a specific format
var datetime = `${n.getFullYear()}-${n.getMonth() + 1}-${n.getDate()}-${n.getHours()}-${n.getMinutes()}-${n.getSeconds()}`;
var st = snowflake.createStatement({
sqlText: `COPY INTO '@s3bucket/${datetime}_something.csv.gz' FROM (SELECT * FROM mytable) FILE_FORMAT=(TYPE=CSV FIELD_OPTIONALLY_ENCLOSED_BY='"' COMPRESSION='gzip') SINGLE=TRUE HEADER=TRUE;`
});
var result = st.execute();
result.next();
rows.push(result.getColumnValue(1))
return rows;
$$
要执行,请运行:
CALL COPY_INTO_PROCEDURE_EXAMPLE();
以上缺少完善的日期格式处理(零填充月、日、小时、分钟、秒)、错误处理(如果COPY INTO
失败)、输入查询的参数化等,但它应该给出一个关于如何实现这一点的总体思路。
推荐阅读
- mongodb - mongodb查找给出空数组
- angular - 如何根据 Typescript 代码创建一个具有 onclick 功能的按钮?
- mysql - MySQL存储过程来清理表的数据?
- git - 如何让评论仅在本地而不是远程(推送时)出现在文件中?
- c# - 将 RouteValues 从 Action 传递到 HTML BeginForm
- angular - IntelliJ 为什么不是所有方法都显示在 Insight 上?洛达什
- android - install_referrer 意图弃用和更新库
- rabbitmq - Message Broker 中的多对多过滤
- laravel - Laravel 使用 pusher 广播 Presence Channel 无法传递参数
- javascript - document.querySelector().getAttribute() 没有获得新的内容元名称