首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何遍历javascript存储过程snowflake中的日期字符串参数

如何遍历javascript存储过程snowflake中的日期字符串参数
EN

Stack Overflow用户
提问于 2021-01-25 16:13:22
回答 1查看 545关注 0票数 2

我是javascript的新手,snowflake在存储过程中使用类似js的语法。

我正在尝试创建动态SQL,以便它在start_date到end_date之间循环,以便根据日期从不同的s3文件夹复制到其中。

代码语言:javascript
复制
CREATE PROCEDURE load_dynamic_s3path_to_table(begin_date strings, end_date strings)
AS
$$

    
    var stmt = snowflake.createStatement(
        {sqlText: "copy into table from s3://test/2020-01-01/"}
        );
    var rs = stmt.execute();

$$;

基于存储过程中的日期参数,例如begin_date 2020-01-01、end_date 2020-01-03。

我想执行3次copy into命令;

代码语言:javascript
复制
copy into table from s3://test/2020-01-01/
copy into table from s3://test/2020-01-02/
copy into table from s3://test/2020-01-03/

我把伪代码想象成这样:

代码语言:javascript
复制
CREATE PROCEDURE load_dynamic_s3path_to_table(begin_date strings, end_date strings)
AS
$$
    var dates = begin_date
    while date(dates)>=date(begin_date) and date(dates)<date(end_date)
        var stmt = snowflake.createStatement(
            {sqlText: "copy into table from s3://test/" + dates}
            );
        var rs = stmt.execute();
        dates+=1

$$;

有没有人可以帮助把伪代码转换成正确的js语法和雪花中的可执行文件?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-26 08:01:16

在JavaScript中管理日期并不是一件容易的事,但是这个存储过程可以做您想要的事情:

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE dates("begin_date" string, "end_date" string)
RETURNS string
LANGUAGE javascript
AS
$$
    function printed_date(d) {
        return d.toISOString().split("T")[0]
    }

    function execute_query(d) {
        var stmt = snowflake.createStatement({
            sqlText: "select '" + d + "' x"
            // "copy into table from s3://test/" + d
        });
        var rs = stmt.execute();
        rs.next();
        return rs.getColumnValue(1);
    }

    var running_date = new Date(begin_date)
    var last_day = new Date(end_date)
    var total_days = (last_day - running_date) / (1000 * 60 * 60 * 24);
    cs = []
    for(var iter=0; iter<=total_days; iter++ ) {
        cs.push(execute_query(printed_date(running_date)));
        running_date.setDate(running_date.getDate() + 1)
   }
   return cs
$$;

call dates('2020-10-01', '2020-10-04');
-- 2020-10-01,2020-10-02,2020-10-03,2020-10-04
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65881058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档