我需要在Stored Proc参数中接收JSON数据,并将其插入雪花目标表(user_json_feedback)。JSON数据有三个关键元素(User、EntityID和Entity Type),而目标表有五列(User、ID、Entity Type、Region和Date)。区域的默认值为“NA”,日期为当前日期。
如果插入成功,则返回true;否则返回false。
我在这里正在为语法和解析问题而挣扎,因为我对编写过程非常陌生。
下面是我一直在尝试做的事情,这显然给了我错误,但服务于我意图的算法。
CREATE OR REPLACE SP_UPDATE_JSON_DATA (JSON_DATA VARIANT)
RETURNS BOOLEAN
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS
$$
//Declare variables
var REGION = 'NA'
var V_DATE = `select current_date;`;
var DATE_STMT= snowflake.createStatement({sqlText: V_DATE });
var curr_date = DATE_STMT.execute();
var src_json = JSON.parse(JSON_DATA);
var sql_command =
`INSERT INTO user_json_feedback (user,id,etype,region ,date)//
select src_json:USER,src_json:ENTITY_ID,src_json:ENTITY_TYPE,REGION,curr_date;`;
try {
snowflake.execute (
{sqlText: sql_command}
);
return "Succeeded."; // Return a success/error indicator.
}
catch (err) {
return "Failed: " + err; // Return a success/error indicator.
}
$$;
带参数的函数调用如下所示
call SP_UPDATE_JSON_DATA ('[{"USER":"XYZ","ENTITY_ID":"BMT0001","ENTITY_TYPE":"BMT"},{"USER":"ABC","ENTITY_ID":"BMT0002","ENTITY_TYPE":"BMT"}]');
提前感谢您的帮助!
1条答案
按热度按时间pw9qyyiw1#
这里有一些东西。
首先是获取当前日期的步骤。curr_date是一个结果集对象。要提取值并在以后使用它,您需要使用. next()读取第一行,然后使用GetColumnValue读取列内容。要在以后将其作为格式良好的字符串传递,您需要使用. toISOString()转换。
其次,在这种情况下,解析后的json返回一个数组,因此您需要迭代数组以插入单个记录。由于事先不知道变量是否包含数组,因此最好检查解析后的json是否为数组,并相应地进行处理
最后一个调整是改变返回类型,以便从返回调用中获得所期望的详细反馈。
更新代码:
结果集:
虽然所有这些都能起作用,但最好还是将整个变量插入到表中,并依靠snowflake强大的半结构化数据查询功能。当然,对于大负载,您会发现批量加载到表中的变量列,然后在视图中进行解析的性能要好得多。