如何在雪花存储过程中进行数学计算?
How to do mathematical computation in stored procedure in snowflake?
加入两个 Snowflake 表后我得到一个计数 (*)。这是在存储过程中完成的。如果计数大于零,我需要传递一个值。我的存储过程从 NiFi 处理器调用,我必须 return NiFi 的值,以便可以从 NiFi 发送电子邮件。
我得到 'NaN' 作为以下代码的输出。
CREATE OR REPLACE PROCEDURE test_Delete_excep()
returns float not null
language javascript
as
$$
var rs;
var return_value = 0;
var SQL_JOIN = "select count(*) from (Select GT.VARIANTDATA from GOV_TEST GT inner join GOV_TEST_H GTH on GT.VARIANTDATA:COL1::String = GTH.VARIANTDATA:COL1::String where to_char(GT.VARIANTDATA) != to_char(GTH.VARIANTDATA));";
var stmt = snowflake.createStatement({sqlText: SQL_JOIN});
rs = stmt.execute();
rs.next();
return_value += JSON.stringify(rs.getColumnValue(1));
if (return_value > 0) { return 'email required';}
$$;
结果如下:
Row TEST_DELETE_EXCEP
1 NaN
如何进行算术计算并return给NiFi处理器一个值?
您永远不会 returning 浮点值,SP 将其定义为 return 类型。如果 return_value 大于 0,它将尝试 return 字符串 'email required.',这不是浮点数。这将生成一个 NaN。如果 return_value 不大于 0,则代码永远不会 return 任何类型的值。那将 return NULL。由于您为 return 指定 NOT NULL,这将强制它为 NaN
此外,我不确定您为什么要对 rs.getColumnValue(1) 进行字符串化。 select count(*) 将产生一个整数值,您可以直接读取它。
你可能想要这样的东西:
CREATE OR REPLACE PROCEDURE test_Delete_excep()
returns float not null
language javascript
as
$$
var rs;
var return_value = 0;
var SQL_JOIN = "select count(*) from (Select GT.VARIANTDATA from GOV_TEST GT inner join GOV_TEST_H GTH on GT.VARIANTDATA:COL1::String = GTH.VARIANTDATA:COL1::String where to_char(GT.VARIANTDATA) != to_char(GTH.VARIANTDATA));";
var stmt = snowflake.createStatement({sqlText: SQL_JOIN});
rs = stmt.execute();
if(rs.next()) {
return_value = rs.getColumnValue(1);
} else {
return -1;
}
return return_value;
$$;
这将 return 您的联接产生的行数 SQL。如果您想要不同的东西,请说明所需的输出。
加入两个 Snowflake 表后我得到一个计数 (*)。这是在存储过程中完成的。如果计数大于零,我需要传递一个值。我的存储过程从 NiFi 处理器调用,我必须 return NiFi 的值,以便可以从 NiFi 发送电子邮件。
我得到 'NaN' 作为以下代码的输出。
CREATE OR REPLACE PROCEDURE test_Delete_excep()
returns float not null
language javascript
as
$$
var rs;
var return_value = 0;
var SQL_JOIN = "select count(*) from (Select GT.VARIANTDATA from GOV_TEST GT inner join GOV_TEST_H GTH on GT.VARIANTDATA:COL1::String = GTH.VARIANTDATA:COL1::String where to_char(GT.VARIANTDATA) != to_char(GTH.VARIANTDATA));";
var stmt = snowflake.createStatement({sqlText: SQL_JOIN});
rs = stmt.execute();
rs.next();
return_value += JSON.stringify(rs.getColumnValue(1));
if (return_value > 0) { return 'email required';}
$$;
结果如下:
Row TEST_DELETE_EXCEP
1 NaN
如何进行算术计算并return给NiFi处理器一个值?
您永远不会 returning 浮点值,SP 将其定义为 return 类型。如果 return_value 大于 0,它将尝试 return 字符串 'email required.',这不是浮点数。这将生成一个 NaN。如果 return_value 不大于 0,则代码永远不会 return 任何类型的值。那将 return NULL。由于您为 return 指定 NOT NULL,这将强制它为 NaN
此外,我不确定您为什么要对 rs.getColumnValue(1) 进行字符串化。 select count(*) 将产生一个整数值,您可以直接读取它。
你可能想要这样的东西:
CREATE OR REPLACE PROCEDURE test_Delete_excep()
returns float not null
language javascript
as
$$
var rs;
var return_value = 0;
var SQL_JOIN = "select count(*) from (Select GT.VARIANTDATA from GOV_TEST GT inner join GOV_TEST_H GTH on GT.VARIANTDATA:COL1::String = GTH.VARIANTDATA:COL1::String where to_char(GT.VARIANTDATA) != to_char(GTH.VARIANTDATA));";
var stmt = snowflake.createStatement({sqlText: SQL_JOIN});
rs = stmt.execute();
if(rs.next()) {
return_value = rs.getColumnValue(1);
} else {
return -1;
}
return return_value;
$$;
这将 return 您的联接产生的行数 SQL。如果您想要不同的东西,请说明所需的输出。