javascript - 使用 Javascript UDF 计算 IRR 时出错

标签 javascript google-bigquery user-defined-functions

我正在使用标准 SQL 和 javascript UDF 在 bigquery 中编写查询,我遇到了错误“错误:语法错误:预期为“<”但得到了“)”;无法解析 [1 处的 CREATE [TEMP] FUNCTION 语句:47]”。下面是命令行。请有人帮忙。非常感谢。

CREATE TEMPORARY FUNCTION IRRCalc(CArray ARRAY)
RETURNS FLOAT64
LANGUAGE js AS """
function IRRCalc(CArray){
  min = 0.0;
  max = 1.0;
  do {
    guess = (min + max) / 2;
    NPV = 0.0;
    for (var j=0; j<CArray.length; j++){
      NPV += CArray[j]/Math.pow((1+guess),j);
    }
    if (NPV > 0){
      min = guess;
    }
    else {
      max = guess;
    }
  } while (Math.abs(NPV) > 0.00000001);
  return guess * 100;
}

""";

WITH Input AS
  (SELECT [-100, 100, 100, 100, 100, 100] as CArray
   UNION ALL
   SELECT [-100, 100, 100, 100, 100] as CArray)

SELECT 
  CArray,
  IRRCalc(CArray) as IRR
FROM Input as t;

最佳答案

如错误声明所述:Expected "<" but got ")"

我认为你只是缺少声明中的类型

CREATE TEMPORARY FUNCTION IRRCalc(CArray ARRAY<INT64>)   

代替

CREATE TEMPORARY FUNCTION IRRCalc(CArray ARRAY)

顺便说一句,看起来你需要清理你的 JS UDF - 见下文

CREATE TEMPORARY FUNCTION IRRCalc(CArray ARRAY<INT64>)
RETURNS FLOAT64
LANGUAGE js AS """
  min = 0.0;
  max = 1.0;
  do {
    guess = (min + max) / 2;
    NPV = 0.0;
    for (var j=0; j<CArray.length; j++){
      NPV += CArray[j]/Math.pow((1+guess),j);
    }
    if (NPV > 0){
      min = guess;
    }
    else {
      max = guess;
    }
  } while (Math.abs(NPV) > 0.00000001);
  return guess * 100;
""";

WITH Input AS
  (SELECT [-100, 100, 100, 100, 100, 100] as CArray
   UNION ALL
   SELECT [-100, 100, 100, 100, 100] as CArray)

SELECT 
  CArray,
  IRRCalc(CArray) as IRR
FROM Input as t

关于javascript - 使用 Javascript UDF 计算 IRR 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49619487/

相关文章:

google-bigquery - BigQuery Java API 读取记录数组 : "Retrieving field value by name is not supported" exception

firebase - Firebase Analytics 仪表板和 BigQuery 导出之间的 "active users metric"差异

go - Bigquery Golang 客户端获取项目列表

sql - 如何在SQL Server 2005中调用表值函数中的存储过程?

SQL:使用函数作为存储过程的参数

javascript - 单击父元素时旋转子元素

javascript - 设置新源时 Html 视频标签闪烁?

scala - 无法在 Spark (Scala) 中的数据帧上执行用户定义的函数

javascript - 如何使用 MySQL 表和 PHP 中的数据绘制折线图

javascript - 如何避免每次运行程序时数字改变单元格大小?