javascript - Snowflake 中的 UDF JavaScript 实现

标签 javascript sql database stored-procedures snowflake-cloud-data-platform

我发现了有用的 JS 函数,我想将其实现到雪花的 UDF 中,以便将复杂的计算转移到 dwh。

http://trentrichardson.com/2010/04/06/compute-linear-regressions-in-javascript/

尝试将上面的 SQL 过程重新编写:

CREATE OR REPLACE PROCEDURE JS_LNR_REG(a array, b array)
RETURNS ARRAY
LANGUAGE javascript
AS
$$
function linearRegression(y,x){
var lr = {};
var n = y.length;
var sum_x = 0;
var sum_y = 0;
var sum_xy = 0;
var sum_xx = 0;
var sum_yy = 0;

for (var i = 0; i < y.length; i++) {

    sum_x += x[i];
    sum_y += y[i];
    sum_xy += (x[i]*y[i]);
    sum_xx += (x[i]*x[i]);
    sum_yy += (y[i]*y[i]);
} 

lr['slope'] = (n * sum_xy - sum_x * sum_y) / (n*sum_xx - sum_x * sum_x);
lr['intercept'] = (sum_y - lr.slope * sum_x)/n;

return lr;}      ; $$;

执行失败并出现错误:SQL 编译错误:无效标识符,自从创建过程以来,这很奇怪。

SELECT JS_LNR_REG('[2,4,5,3,1]', '[5.2, 5.7, 5.0, 4.2]');

最佳答案

你就快到了。要传递数组,请尝试使用 ARRAY_CONSTRUCT 或 PARSE_JSON,如下所示:

SELECT JS_LNR_REG(array_construct(1,2,3,4), array_construct(5,4,3,2));
SELECT JS_LNR_REG(parse_json('[1,2,3,4]'), parse_json('[5,4,3,2]'));

要使代码正常工作,请将其设为返回 OBJECT 的 FUNCTION,并确保从 UDF 中实际调用 LinearRegression():

CREATE OR REPLACE FUNCTION JS_LNR_REG(A array, B array)
  RETURNS OBJECT
  LANGUAGE JAVASCRIPT
  STRICT
AS
$$
function linearRegression(y,x){
  var lr = {};
  var n = y.length;
  var sum_x = 0;
  var sum_y = 0;
  var sum_xy = 0;
  var sum_xx = 0;
  var sum_yy = 0;

  for (var i = 0; i < y.length; i++) {

      sum_x += x[i];
      sum_y += y[i];
      sum_xy += (x[i]*y[i]);
      sum_xx += (x[i]*x[i]);
      sum_yy += (y[i]*y[i]);
  } 

  lr['slope'] = (n * sum_xy - sum_x * sum_y) / (n*sum_xx - sum_x * sum_x);
  lr['intercept'] = (sum_y - lr.slope * sum_x)/n;

  return lr;
  }      

  return linearRegression(A,B)
; $$;

希望这对您有帮助。

关于javascript - Snowflake 中的 UDF JavaScript 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59773825/

相关文章:

javascript - Reactjs 将 key prop 分配给数组渲染组件

mysql - 一些查询有错误

sql查询以在表中查找第二个非空值(oracle)

php - 如何在我的自动建议脚本中使用表 B 中的数据从表 A 中检索数据?

sql - table==1 是意外的此时批处理文件

sql - 分页使用搜索方法(键集)

php - Laravel 5.2 数据库查询中的条件

javascript - 提供的目标来源与收件人窗口的来源不匹配(Rocket 聊天)

javascript - .parent().next() 不起作用

javascript - PHP while循环中唯一标识Javascript Modal