微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

雪花 JavaScript 程序如何从不在阶段的对象更新字段?

如何解决雪花 JavaScript 程序如何从不在阶段的对象更新字段?

我正在尝试在 SNowflake 上执行 JavaScript 过程,以使用 JavaScript 数组中的相关值更新表。

假设我有下表:

enter image description here

并拥有这个数组:

var arr = {"gender_value": "Gender","age_range": "Age Range"}

所以我更新后的表格的最终结果是:

enter image description here

我尝试了类似的东西:

var query = "
    MERGE INTO mytable m
    USING (SELECT * FROM "+arr+" )
";

但我认为如果对象不在阶段,就不可能从对象中进行 SELECT。

解决方法

您将不得不在 SQL 中解析您的数组以获取 MERGE 的结构。另一种选择是将数组存储在临时表中。但我没有看到任何问题让它起作用,请看我的例子:

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"}');  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?