首页 > 解决方案 > 在 bigquery UDF 中使用 SQL

问题描述

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

我想创建一个函数来概括我的问题的解决方案,如果您有其他解决方案,我不喜欢使用 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 的情况下对我的解决方案进行硬编码

标签: google-cloud-platformuser-defined-functionsgoogle-bigquery

解决方案


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

我认为您想要实现的是可以在存储过程中完成,然后您可以使用所需的参数调用它


推荐阅读