如何创建使用用户定义函数的 BigQuery 视图?

Posted

技术标签:

【中文标题】如何创建使用用户定义函数的 BigQuery 视图?【英文标题】:How do I create a BigQuery view that uses a user-defined function? 【发布时间】:2015-12-08 22:32:56 【问题描述】:

我想创建一个 BigQuery 视图,该视图使用调用 user-defined function 的查询。如何告诉 BigQuery 在哪里可以找到 UDF 的代码文件?

【问题讨论】:

【参考方案1】:

视图可以引用存储在Google Cloud Storage、内联代码块或本地文件中的 UDF 资源(内容将被加载到内联代码块中)。

要使用 BigQuery UI 创建带有 UDF 的视图,只需像正常运行查询时一样填写 UDF 资源,然后保存为视图。 (换句话说,不需要特殊操作)。

要在从命令行客户端创建视图期间指定这些,请使用 --view_udf_resource 标志:

bq mk --view="SELECT foo FROM myUdf(table)" \
  --view_udf_resource="gs://my-bucket/my-code.js"

在上面的示例中,gs://my-bucket/my-code.js 将包含myUdf() 的定义。如果您需要在视图查询中引用多个代码文件,您可以提供多个 --view_udf_resources 标志。

您可以指定 gs:// URI 或本地文件。如果指定本地文件,则代码将被读取一次并打包到内联代码资源中。

通过 API,这是一个名为 userDefinedFunctionResources 的重复字段。它是包含视图 SQL 的 query 字段的兄弟。

【讨论】:

您好,能否提供一个视图中的内联 UDF 示例? 内联 UDF 是指已弃用的 js(...) 语法吗? 我的意思是 CREATE TEMPORARY FUNCTION ...不过我已经联系了 Google 支持,他们告诉我视图中不可能有内联临时 UDF。 感谢您的澄清。目前不支持;我建议在 issuetracker.google.com/issues/… 打开一个功能请求来跟踪它 根据this question,此答案中的方法仅适用于旧版 SQL,不适用于标准 SQL。这符合我今天的经历。

以上是关于如何创建使用用户定义函数的 BigQuery 视图?的主要内容,如果未能解决你的问题,请参考以下文章

使用用户定义的函数在 BigQuery 数据集中插入海量数据时如何优化性能

如何使用 DDL 设置授权视图?

JavaScript 中的 BigQuery 用户定义函数不会修剪分区

如何使用 UI 从 BigQuery 中的视图创建表?

将 STRUCT 的 ARRAY 传递给标准 BigQuery SQL 的用户定义函数

如何使用 Java API 使用标准 SQL 创建 BigQuery 视图?