在 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 自定义维度?