使用 Google Datalab,如何在 Google BigQuery 中使用 UDF 从复杂查询创建表?

Posted

技术标签:

【中文标题】使用 Google Datalab,如何在 Google BigQuery 中使用 UDF 从复杂查询创建表?【英文标题】:Using Google Datalab, how to create table from a complex query with UDF in Google BigQuery? 【发布时间】:2016-06-05 19:15:26 【问题描述】:

我见过很多类似的问题,但它们并非特定于 Google Cloud Datalab 并且同时使用 UDF,例如query execution shows Unknown TVS error 和 creating table from query result via python API。

我在不使用 UDF 时设法创建了表,但是当它使用时,它返回错误“Unknown TVF: myFunc”。

编辑 这是我正在使用的代码:

%%bigquery udf --module transform_field
...udf function...

然后我在sql查询中使用了上面的udf函数:

%%sql --module querymodule
...complex SELECT query FROM transform_field(table)...

然后我想使用该查询创建另一个表,如下所示:

%%bigquery execute --target project:dataset.tablename --query querymodule

但它一直显示此错误:

未知的 TVF:TRANSFORM_FIELD

【问题讨论】:

请您分享您的一些代码吗? 添加了一些代码,谢谢! 【参考方案1】:

好的,我找到了。事实证明,在%%bigquery execute 单元格中使用它之前,您需要通过 python 单元格传递查询:

bq_query = bq.Query(querymodule, udf=transform_field)

因此整个过程应该如下:

%%bigquery udf --module transform_field
...udf function...

然后我在sql查询中使用了上面的udf函数:

%%sql --module querymodule
...complex SELECT query FROM transform_field(table)...

然后使用上面的查询和udf函数创建一个bq.Query对象。

bq_query = bq.Query(querymodule, udf=transform_field)

然后在创建表时使用bq_query

%%bigquery execute --target project:dataset.tablename --query bq_query

我一直对晚安的效果感到惊讶。

【讨论】:

太棒了!作为附加资源,Datalab wiki 中有一个关于 UDF 的条目,其中包含一个工作示例:github.com/googledatalab/datalab/wiki/UDFs 谢谢,我认为需要在 wiki / 文档中添加更多关于上述特定任务的示例。

以上是关于使用 Google Datalab,如何在 Google BigQuery 中使用 UDF 从复杂查询创建表?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Cloud Datalab 时如何将 .gz 文件加载到 BigQuery?

如何使用R将Google Cloud Datalab输出保存到BigQuery中

如何使用 R 将 Google Cloud Datalab 输出保存到 BigQuery

如何在我的本地 linux 服务器上运行 google-cloud-datalab?

如何在 Datalab 的 api 中使用 Bigquery 中的子查询?

从 Google Cloud Datalab 向 BigQuery 插入数据时如何调试解析错误?