使用 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?