【发布时间】:2017-10-13 22:34:53
【问题描述】:
我知道我可以定义一个User Defined Function 来执行一些自定义计算。我也知道在使用 GROUP BY 子句时,我可以使用“开箱即用”aggregation functions 将值集合减少为单个值。
是否可以定义一个自定义的用户定义的聚合函数以与GROUP BY 子句一起使用?
【问题讨论】:
标签: google-bigquery aggregate-functions udf
我知道我可以定义一个User Defined Function 来执行一些自定义计算。我也知道在使用 GROUP BY 子句时,我可以使用“开箱即用”aggregation functions 将值集合减少为单个值。
是否可以定义一个自定义的用户定义的聚合函数以与GROUP BY 子句一起使用?
【问题讨论】:
标签: google-bigquery aggregate-functions udf
事实证明这是可能的(只要我们寻求聚合的组在内存中具有合理的大小)只需一点“胶水” - 即ARRAY_AGG 函数
步骤如下:
ARRAY<T> 类型的输入参数创建一个UDF,其中T 是您要聚合的值的类型。ARRAY_AGG 函数和GROUP BY 子句生成T 数组并传递到您的UDF。作为一个具体的例子:
CREATE TEMP FUNCTION aggregate_fruits(fruits ARRAY<STRING>)
RETURNS STRING
LANGUAGE js AS """
return "my fruit bag contains these items: " + fruits.join(",");
""";
WITH fruits AS
(SELECT "apple" AS fruit
UNION ALL SELECT "pear" AS fruit
UNION ALL SELECT "banana" AS fruit)
SELECT aggregate_fruits(ARRAY_AGG(fruit))
FROM fruits
【讨论】: