雪花中的 Javascript 函数将表名附加到当前日期

Posted

技术标签:

【中文标题】雪花中的 Javascript 函数将表名附加到当前日期【英文标题】:Javascript function in snowflake to append tablename with current date 【发布时间】:2020-02-11 16:21:35 【问题描述】:

我最近开始使用雪花,一直卡在这个问题上:

我想将一个名为 AB_USER 的表克隆到 AB_USER_(current_date)。我编写了以下代码来完成此操作:

CREATE or replace PROCEDURE backup_proc()
  RETURNS VARCHAR
  LANGUAGE javascript
  AS
  $$
  var tab_name = `AB_USER_BCK_2020_`+ current_date();
  stat = `create or replace table staging.` + tab_name + ` clone staging.AB_USER`;
  var rs = snowflake.execute(  sqlText: stat );
  return 'Done.';
  $$;

问题是我找不到合适的函数来获取当前日期。 Snowflake 提供了一个 JS 环境,但我不知道使用哪个函数来获取当前日期。

我对雪花非常陌生,因此非常感谢您提供任何帮助。

谢谢。

【问题讨论】:

与大多数数据库一样,Snowflake 使用 CURRENT_DATE: docs.snowflake.net/manuals/sql-reference/functions/…。 由于雪花使用javascript,使用current_date会抛出错误:JavaScript execution error: Uncaught ReferenceError: current_date is not defined in BACKUP_PROC at ' var tab_name = AB_USER_BCK_+ current_date();' 【参考方案1】:

CURRENT_DATE 是一条 SQL 命令,因此您需要将其作为 SQL 语句调用,并使用 snowflake.execute。

正如我所见,您想从当前日期获取月份和日期的值,因此您可以使用以下过程:

CREATE or replace PROCEDURE backup_proc()
RETURNS VARCHAR
LANGUAGE javascript
AS
$$
var curdate = snowflake.execute(  sqlText: "SELECT TO_CHAR(CURRENT_DATE,'MMDD') as curdate"  );
curdate.next();
var tab_name = "AB_USER_BCK_2020_"+ curdate.getColumnValue('CURDATE');
var stat = "create or replace table staging." + tab_name + " clone staging.AB_USER";
var rs = snowflake.execute(  sqlText: stat );
return "Done.";
$$
;

【讨论】:

谢谢 :) 你能告诉我这条线在做什么吗? ` curdate.next();` 需要调用next()函数使光标移动到第一行,并且可以通过getColumnValue访问字段值。

以上是关于雪花中的 Javascript 函数将表名附加到当前日期的主要内容,如果未能解决你的问题,请参考以下文章

将表名和列名定义为 plpgsql 函数中的参数?

将表名传递给函数并返回表

有没有办法在不安装任何驱动程序的情况下将表从雪花导入 R 中的数据帧?

Oracle函数:如何将表名作为参数传递,并使用游标结果作为表名?

雪花中的 JavaScript UDF

如何从雪花中的数据库模式中检索所有表名