BigQuery SQL中能否在UDF内部使用聚合函数?
你遇到的报错是因为BigQuery的普通标量SQL UDF默认不支持内部调用聚合函数,这是平台的内置限制。要实现你的需求,需要改用**自定义聚合函数(UDAF)**来封装聚合逻辑:
解决方法
将你的函数声明修改为聚合函数即可,示例代码如下:
CREATE OR REPLACE AGGREGATE FUNCTION my_function(x ANY TYPE) AS ( APPROX_QUANTILES(x, 100)[OFFSET(25)] );
使用方式
创建完成后,你可以像调用原生聚合函数一样使用这个自定义函数,示例:
-- 按category分组计算各组的25分位值 SELECT category, my_function(value) AS p25_value FROM your_dataset.your_table GROUP BY category
补充说明
- 如果你的需求不是对分组后的多行值计算分位数,而是对单个数组字段内的元素计算分位数,不需要封装为UDF,直接在查询中结合
UNNEST操作写原生APPROX_QUANTILES逻辑即可,反而更高效。 - 自定义聚合函数仅支持封装聚合类逻辑,不支持在非聚合场景下作为标量函数调用。
内容的提问来源于stack exchange,提问作者redarah
相关产品推荐
相关产品推荐

