【问题标题】:Getting same value for all records in snowflake为雪花中的所有记录获取相同的值
【发布时间】:2022-01-07 04:36:54
【问题描述】:
我有 key_value 表和 key 表。我必须只从 key_value 表中加载键并使用雪花过程插入到键表中。我写了下面的代码。执行后,我在键表中得到相同的键值,而不是所有键。
create or replace procedure proc_key_load()
returns varchar
language javascript
as
$$
var query=`select key from key_value`;
var ret=snowflake.createStatement( {sqlText: query}).execute();
var length=ret.getRowCount();
var counter=0;
while(counter<length){
ret.next();
var value=ret.getColumnValue(1);
var load_query=`insert into key_load values(` + value +`)`;
var ret=snowflake.createStatement( {sqlText: load_query}).execute();
counter += 1;
}
return 'SUCCESS';
$$
【问题讨论】:
标签:
snowflake-cloud-data-platform
procedure
【解决方案1】:
我没有测试它,但我看到你在循环中重新定义了“ret”。尝试分配不同的变量:
create or replace procedure proc_key_load()
returns varchar
language javascript
as
$$
var query=`select key from key_value`;
var ret=snowflake.createStatement( {sqlText: query}).execute();
var length=ret.getRowCount();
var counter=0;
while(counter<length){
ret.next();
var value=ret.getColumnValue(1);
var load_query=`insert into key_load values(` + value +`)`;
var ret2 = snowflake.createStatement( {sqlText: load_query}).execute();
counter += 1;
}
return 'SUCCESS';
$$
更新:我测试了上面的代码,它可以工作。如果您只需要将一些数据从一个表复制到另一个表,您可以使用普通 SQL 对吗?比如:
INSERT INTO key_load SELECT key FROM key_value;
不管怎样,如果你真的需要使用上面的程序,你可以用更高效的方式来写:
create or replace procedure proc_key_load()
returns varchar
language javascript
as
$$
var query=`select key from key_value`;
var ret=snowflake.createStatement( {sqlText: query}).execute();
while(ret.next()){
var value=ret.getColumnValue(1);
var load_query=`insert into key_load values(?)`;
snowflake.createStatement( {sqlText: load_query, binds:[value] }).execute();
}
return 'SUCCESS';
$$;