Google 标准 SQL UDF - 写入 BigQuery

Posted

技术标签:

【中文标题】Google 标准 SQL UDF - 写入 BigQuery【英文标题】:Google Standard SQL UDF - writing to BigQuery 【发布时间】:2017-03-27 20:11:08 【问题描述】:

我的问题是关于从 BigQuery 标准 SQL UDF 写入 BigQuery。

我有一个要求,我必须在标准 SQL 中进行一些计算。在这些计算之后,我必须将这些计算数据保存到 BigQuery。

从标准 SQL UDF 将数据插入 BigQuery 的标准方法是什么?

【问题讨论】:

【参考方案1】:

基本上,您可以使用 UDF 发出一行或多行。在标准 UDF 中,如果要发出行,则必须发出 Array 和 Struct。

Migration guide 中有一个示例将数据添加到不存在的列。

向下滚动至:Functions operate on values rather than rows。在旧版 SQL 中,javascript 函数对表中的行进行操作。在标准 SQL 中,如上例所示,JavaScript 函数对值进行操作。要使用标准 SQL 将行值传递给 JavaScript 函数,请定义一个函数,该函数采用与表相同的行类型的结构。

如果您最终发出一个包含重复数据的结构,您可以将查询结果写入新表。那是你的插入。

这意味着您需要以这样的方式创建查询结果,将查询结果写入目标表,并成为您的插入。由于 BQ 不提供来自 UDF 的严格的 INSERT 声明。

【讨论】:

【参考方案2】:

从标准 SQL UDF 中将数据插入大查询的标准方法是什么

no way 可以从 UDF 本身将数据插入 BigQuery 将 UDF 视为任何其他常规函数,但您可以使用 JavaScript 或 SQL 创建自己的函数。 您可能知道 - 这些没有任何允许保存到 BigQuery 的 BigQuery 函数。 相反,您可以将查询结果保存到目标表中 - 即 BigQuery 中的 standard way

以下是相关的 UDF 限制,让您了解在 UDF 中什么是不可行的

DOM 对象 Window、Document 和 Node 以及需要它们的函数不受支持。 不支持依赖本机代码的 JavaScript 函数。 JavaScript 中的按位运算仅处理最重要的 32 位。 由于其不确定性,调用用户定义函数的查询不能使用缓存结果。 您不能引用 UDF 中的表。

在https://cloud.google.com/bigquery/docs/reference/standard-sql/user-defined-functions查看更多信息

【讨论】:

以上是关于Google 标准 SQL UDF - 写入 BigQuery的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用标准 BIP 参数在 BI Publisher 中调用 SQL Server 存储过程

使用外部 UDF 库运行 BigQuery Standard SQL

在 pyspark 中使用 UDF 和简单数据帧

第八篇:Spark SQL Catalyst源码分析之UDF

执行 UDF 失败