在 bigquery UDF 中使用 SQL

Posted

技术标签:

【中文标题】在 bigquery UDF 中使用 SQL【英文标题】:Using SQL inside bigquery UDF 【发布时间】:2019-11-15 09:32:29 【问题描述】:

我正在尝试通过创建一个函数来解决我在数据中面临的问题,该函数从字符串数组中获取代码并从其他表中获取代码描述,然后将结果重新加入单个字符串中

我想创建一个函数来概括我的问题的解决方案,如果您有其他解决方案,我不喜欢使用 temp 函数:

CREATE TEMP FUNCTION
  TEST(ref_no INT64,
    string_array STRING,
    market_par STRING) AS ( (
    SELECT
      STRING_AGG(SUBSTR(descr,2,LENGTH(descr)-2),', ')
    FROM (
      SELECT
        json_EXTRACT(description,
          '$.EnglishDesc') descr
      FROM (
        SELECT
          CAST(n AS int64) n
        FROM (
          SELECT
            *
          FROM
            UNNEST(SPLIT(SUBSTR(string_array,2,LENGTH(string_array)-2))) AS n)) z
      JOIN
        `project.dataset.table` y
      ON
        (z.n = y.code
          AND y.typeid = ref_no
          AND y.market = market_par)) )) ;

所以我将字符串数组转换为嵌套列,然后在其上使用 unnest,最后我将结果与字典表连接起来 我收到以下错误:

CREATE TEMPORARY FUNCTION statements must be followed by an actual query.

能否解决我的问题并将其推广到其他类型的代码,或者我每次都必须在不使用 UDF 的情况下对我的解决方案进行硬编码

【问题讨论】:

【参考方案1】:

您不能对 SQL UDF 中的另一个表执行查询。这就是为什么几周前,Google 在 Beta 版中引入了 Bigquery 中的脚本和存储过程。

我认为你想要实现的可以在stored procedure完成,然后你可以call it with the desired parameters

【讨论】:

感谢您的回复,我认为这是 SQL 环境中函数的一个很大限制,我认为过程对我没有帮助,因为我想转换数据并在单个查询中查看它,是反正我能做到吗? 您想在查询的每一行上调用它吗?视图是否可以帮助您分解此“功能”代码? 我想用它来解码某个列,操作包括将字符串数组转换为行,然后将这些行与字典表连接以获得代码描述,然后在一个字符串中返回所有描述,我可以为每一列编写一个视图并对问题进行硬编码,但需要创建一个更好的函数

以上是关于在 bigquery UDF 中使用 SQL的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 中使用 javascript udf 进行 tf idf 计算时,UDF 工作程序在执行期间超时

如何在 BigQuery 中使用 UDF 展平 Google Analytics 自定义维度?

在 BigQuery UDF 中使用 js 包

在 Bigquery UDF 中使用地理编码服务

如何使用调用 UDF 的 Python 脚本来使用 BigQuery API

BigQuery 中使用引用另一个表的 UDF 的相关子查询错误