在 BigQuery UDF 中使用 js 包

Posted

技术标签:

【中文标题】在 BigQuery UDF 中使用 js 包【英文标题】:Use js packages in BigQuery UDF 【发布时间】:2018-11-15 07:22:50 【问题描述】:

我试图创建一个需要外部 npm 包的 BigQuery UDF。

CREATE TEMPORARY FUNCTION tempfn(message STRING)
RETURNS STRING 
  LANGUAGE js AS """
  var tesfn = require('js-123');
  return tesfn(message)
""";  
SELECT tempfn("Hello") as test; 

它给了我一个错误

ReferenceError: 要求未在 tempfn(STRING) 第 2 行定义, 第 15-16 列

有什么方法可以让我使用这些包吗?

【问题讨论】:

【参考方案1】:

您不能使用 requirejavascript UDF 加载 npm 包。但是,您可以从 GCS 加载外部库,如 outlined in the documentation。文档给出的示例是,

CREATE TEMP FUNCTION myFunc(a FLOAT64, b STRING)
  RETURNS STRING
  LANGUAGE js AS
"""
    // Assumes 'doInterestingStuff' is defined in one of the library files.
    return doInterestingStuff(a, b);
"""
OPTIONS (
  library="gs://my-bucket/path/to/lib1.js",
  library=["gs://my-bucket/path/to/lib2.js", "gs://my-bucket/path/to/lib3.js"]
);

SELECT myFunc(3.14, 'foo');

这里假设您在 Cloud Storage 中有具有这些名称的文件,并且其中一个定义了 doInterestingStuff

【讨论】:

以上是关于在 BigQuery UDF 中使用 js 包的主要内容,如果未能解决你的问题,请参考以下文章

从 js UDF 输出 INT64

JS UDF 返回标准 SQL / BigQuery 的结构并创建两列

在 BigQuery 中创建 UDF

在 BigQuery 的查询中使用 UDF 作为列

BigQuery -- 在公开共享项目中使用 UDF 的问题

在 BigQuery 中使用 javascript udf 进行 tf idf 计算时,UDF 工作程序在执行期间超时