将数据从雪花卸载到s3时,如何在zip文件中添加日期时间戳?

时间:2020-05-04 16:28:50

标签: snowflake-cloud-data-platform snowflake-task

我希望能够为我正在写入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;

谢谢。

2 个答案:

答案 0 :(得分:1)

COPY INTO语句的阶段或位置部分内部的syntax for defining a path不允许函数在SQL中动态定义它。

但是,您可以使用stored procedureJavaScript Date APIs使用some string formatting完成动态查询的构建。

在您的用例中,这是一个非常简单的示例,其中包含一些代码adapted from another question

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失败),输入查询的参数化等,但是应提供一个有关如何实现这一目标的总体思路。

答案 1 :(得分:0)

雪花尚不支持此功能,但是即将推出。