Snowflake Snowsql有条件中断IF,SWITCH

如何解决Snowflake Snowsql有条件中断IF,SWITCH

有关SNowflake sNowsql的问题。并且需要进行条件检查,以查看是否已将ETL_Date插入到表中以及是否已插入;退出存储的过程。否则,如果未插入日期,则继续并插入数据,然后返回成功(零)并退出。任何帮助将不胜感激。谢谢。

起点:到目前为止,我已经完成了代码

IF ((SELECT IFNULL(MAX(ETL_DATE),'1900-01-01') FROM DB.TABLES.test_20200909) > CURRENT_DATE() )
{RETURN 0; break;}
else insert into DB.TABLES.test_20200909 (ETL_DATE,INSERT_VALUE)
values(CURRENT_DATE(),1)

这给了我错误 sql编译错误:位置0处的语法错误第1行出现意外的'IF'。

目标/终结游戏:必须将其放入存储的proc中。 到目前为止,我所说的是:

CREATE or replace procedure   TABLE_DB.TABLES.test_20200909_1 ()
returns FLOAT
language javascript
as
$$

var test_1 =`IF ((SELECT MAX(ETL_DATE) FROM DB.TABLES.test_20200909) > CURRENT_DATE() )
{RETURN 0; break;}
else insert into DB.TABLES.test_20200909 (ETL_DATE,1)`;
var test_1_stmt =  sNowflake.createStatement({sqlText: test_1});  
var test_1_res = test_1_stmt.execute();
return 0
$$

解决方法

如果您的目标是创建一个存储过程来检查/管理您的负载,我将创建一个类似于以下内容的文件:

create or replace procedure SP_CHECK_LOAD()
    RETURNS VARCHAR(256) NOT NULL
    LANGUAGE JAVASCRIPT
    EXECUTE AS CALLER
as $$    

function get_check_load()
{
    var v_out_check_load;
    rs = snowflake.execute ( { sqlText: `SELECT CASE WHEN MAX(ETL_DATE)>=CURRENT_DATE() THEN 0 ELSE 1 END AS CHECK_RESULT FROM DB.TABLES.test_20200909;` }  );
    if( rs.next())
    {
       v_out_check_load = rs.getColumnValue(1); // get check result
    }

    return v_out_check_load; 
}   
  
  var result = new String('Successfully Executed');
  var v_check = get_check_load();
  
  if ( v_check==1 )
  {
    //data not yet loaded -> load them
    try {
       
    var sql_command = `INSERT INTO DB.TABLES.test_20200909 (ETL_DATE,INSERT_VALUE) VALUES(CURRENT_DATE(),1)`;
 
    var stmt = snowflake.createStatement({sqlText: sql_command});
    var res = stmt.execute();  
    
    }
    catch (err) {
    result =  "Failed: Code: " + err.code + " | State: " + err.state;
    result += "\n  Message: " + err.message;
    result += "\nStack Trace:\n" + err.stackTraceTxt; 
    } 
 } // end if
 
 return result;

  $$;

请注意,我在检查条件MAX(ETL_DATE)> = CURRENT_DATE()中使用了> = ,而不仅是在您的示例中使用了>,因为在这种情况下,您将排除当前日期加载。如果这不适合您的需求,请更改它。

,

根据您提到的内容,看起来您甚至不需要存储过程即可执行此操作。您可以使用合并匹配,它可能更易于设置

,并且需要进行条件检查,以查看是否已将ETL_Date插入到表中以及是否已插入;退出存储的过程。 ELSE如果未插入日期,则继续并插入数据,然后返回成功(零)

请查看下面是否是您要实现的目标

CREATE OR REPLACE TABLE test_20200909(INSERT_VALUE NUMBER,ETL_DATE TIMESTAMP);
 
INSERT INTO TEST_20200909 VALUES(1,'2020-09-01 00:00:00.000');
INSERT INTO TEST_20200909 VALUES(1,'2020-09-02 00:00:00.000');
INSERT INTO TEST_20200909 VALUES(1,'2020-09-03 00:00:00.000');
INSERT INTO TEST_20200909 VALUES(1,'2020-09-04 00:00:00.000');
 
SELECT * FROM test_20200909;
 
MERGE INTO test_20200909 T
 USING(SELECT MAX(ETL_DATE) maxdate FROM test_20200909) S 
 ON S.maxdate=CURRENT_DATE()
 when NOT matched then 
  insert (INSERT_VALUE,ETL_DATE)  values (1,CURRENT_DATE());
  
SELECT * FROM test_20200909;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?