如何在cloud datalab上创建和使用UDF?
Posted
技术标签:
【中文标题】如何在cloud datalab上创建和使用UDF?【英文标题】:How to create and use UDF on cloud datalab? 【发布时间】:2015-11-11 08:46:32 【问题描述】:我使用命令创建了一个名为“passthrough”的udf,
%%bigquery udf -m passthrough
function passthrough(row, emit)
emit(outputA: row.inputA, outputB: row.inputB);
bigquery.defineFunction(
'passthrough',
['inputA', 'inputB'],
['name': 'outputA', 'type': 'string',
'name': 'outputB', 'type': 'string'],
passthrough
);
然后,它返回了错误。
javascript 必须声明输入行和输出发射器 参数使用有效的 jsdoc 格式 cmets。输入行参数 声明必须输入为 field:type, field2:type 并且 输出发射器参数声明必须键入为 函数(field:type, field2:type.
所以,我在透传功能上面加了jsdoc cmets,
/**
* @param field:string, field2:string row
* @param function(field:string, field2:string) emit
*/
然后运行 sql 命令。但它仍然返回错误“Unknown TVF: passthrough”。
%%sql
SELECT outputA, outputB FROM (passthrough(SELECT "abc" AS inputA, "def" AS inputB))
如何声明参数,稍后在 datalab 上使用 UDF?
【问题讨论】:
【参考方案1】:您的 UDF 定义应该是:
/**
* @param field:string, field2:string row
* @param function(field:string, field2:string) emit
*/
function passthrough(row, emit)
emit(outputA: row.inputA, outputB: row.inputB);
如果您现在想使用 UDF,则需要在 Python 代码中使用中间步骤,当我们更新时,这将不再起作用(当您当前的操作方式应该基本正确时)。
您需要将 UDF 应用于表格,然后执行以下操作:
import gcp.bigquery as bq
tbl = bq.Query('SELECT "abc" AS inputA, "def" AS inputB').results()
udf_call = passthrough(tbl)
然后在你的 SQL 中:
%%sql
SELECT outputA, outputB FROM $udf_call
当更新到来时,你可以做你现在正在做的事情:
%%sql
SELECT outputA, outputB FROM (passthrough(SELECT "abc" AS inputA, "def" AS inputB))
【讨论】:
【参考方案2】:我们目前拥有的 UDF 支持在 BigQuery 中首次引入时针对早期的 UDF。我们正在积极努力更新我们所拥有的支持。
您可以在我们的 github 存储库中跟踪一些进度 -- https://github.com/GoogleCloudPlatform/datalab ...您可以在此处查看现有支持的示例(将会更改):https://github.com/GoogleCloudPlatform/datalab/blob/master/dev/notebooks/BigQuery%20-%20JavaScript%20UDFs.ipynb
【讨论】:
以上是关于如何在cloud datalab上创建和使用UDF?的主要内容,如果未能解决你的问题,请参考以下文章
Google Cloud Datalab 中的 BigQuery - 获取查询文本?
如何在我的本地 linux 服务器上运行 google-cloud-datalab?
如何使用R将Google Cloud Datalab输出保存到BigQuery中
如何在 Google Cloud Datalab 中使用 Bigquery JSON 函数