Snowflake JavaScript 程序如何从不在阶段中的对象更新字段?
Snowflake JavaScript procedure how to update a field from an object that is not in a stage?
我正在尝试在 Snowflake 上执行 JavaScript 程序,以更新 table 与 JavaScript 数组中的相关值。
假设我有以下 table:
并拥有这个数组:
var arr = {"gender_value": "Gender", "age_range": "Age Range"}
所以我更新后的 table 的最终结果是:
我试过类似的方法:
var query = "
MERGE INTO mytable m
USING (SELECT * FROM "+arr+" )
";
但我认为如果对象不在阶段中,则不可能 SELECT。
您将不得不在 SQL 中解析您的数组以获得 MERGE 的结构。另一种选择是将数组存储在临时 table 中。但是我没有看到任何问题让它工作,看我的例子:
create or replace table so_test
(
question_name varchar
,answer varchar
,question_label varchar
);
insert into so_test values ('gender_value','Female',null),('age_range','>60',null);
merge into so_test
using
(
select
g.key as join_key
,g.value as join_value
from
(
select parse_json(column1) as arr from values ('{"gender_value": "Gender", "age_range": "Age Range"}')
) x,
lateral flatten(input => x.arr) g
)src
on so_test.question_name = src.join_key
when matched then update
set question_label = src.join_value;
--proc example
CREATE OR REPLACE PROCEDURE "ARRAY_TEST_SP"(sp_input varchar)
RETURNS VARCHAR(16777216)
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS
$$
var v_array = SP_INPUT;
var v_merge = `merge into so_test
using
(
select
g.key as join_key
,g.value as join_value
from
(
select parse_json(column1) as arr from values (?)
) x,
lateral flatten(input => x.arr) g
)src
on so_test.question_name = src.join_key
when matched then update
set question_label = src.join_value;`;
var v_stmt = snowflake.createStatement(
{
sqlText: v_merge,
binds:[v_array]
}
);
try {
v_stmt.execute()
return "Succeeded."; // Return a success/error indicator.
}
catch (err) {
return "Failed: " + err; // Return a success/error indicator.
}
$$;
call ARRAY_TEST_SP('{"gender_value": "Gender", "age_range": "Age Range"}');
我正在尝试在 Snowflake 上执行 JavaScript 程序,以更新 table 与 JavaScript 数组中的相关值。
假设我有以下 table:
并拥有这个数组:
var arr = {"gender_value": "Gender", "age_range": "Age Range"}
所以我更新后的 table 的最终结果是:
我试过类似的方法:
var query = "
MERGE INTO mytable m
USING (SELECT * FROM "+arr+" )
";
但我认为如果对象不在阶段中,则不可能 SELECT。
您将不得不在 SQL 中解析您的数组以获得 MERGE 的结构。另一种选择是将数组存储在临时 table 中。但是我没有看到任何问题让它工作,看我的例子:
create or replace table so_test
(
question_name varchar
,answer varchar
,question_label varchar
);
insert into so_test values ('gender_value','Female',null),('age_range','>60',null);
merge into so_test
using
(
select
g.key as join_key
,g.value as join_value
from
(
select parse_json(column1) as arr from values ('{"gender_value": "Gender", "age_range": "Age Range"}')
) x,
lateral flatten(input => x.arr) g
)src
on so_test.question_name = src.join_key
when matched then update
set question_label = src.join_value;
--proc example
CREATE OR REPLACE PROCEDURE "ARRAY_TEST_SP"(sp_input varchar)
RETURNS VARCHAR(16777216)
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS
$$
var v_array = SP_INPUT;
var v_merge = `merge into so_test
using
(
select
g.key as join_key
,g.value as join_value
from
(
select parse_json(column1) as arr from values (?)
) x,
lateral flatten(input => x.arr) g
)src
on so_test.question_name = src.join_key
when matched then update
set question_label = src.join_value;`;
var v_stmt = snowflake.createStatement(
{
sqlText: v_merge,
binds:[v_array]
}
);
try {
v_stmt.execute()
return "Succeeded."; // Return a success/error indicator.
}
catch (err) {
return "Failed: " + err; // Return a success/error indicator.
}
$$;
call ARRAY_TEST_SP('{"gender_value": "Gender", "age_range": "Age Range"}');