BigQuery用户定义的聚合功能?

时间:2017-05-15 08:15:30

标签: google-bigquery aggregate-functions udf

我知道我可以定义User Defined Function以执行一些自定义计算。我也知道我可以使用开箱即用的'开箱即用的' aggregation functions在使用GROUP BY子句时将值集合减少为单个值。

是否可以定义用于GROUP BY子句的自定义用户定义聚合函数?

1 个答案:

答案 0 :(得分:8)

事实证明这是可能的(只要我们寻求聚合的组在内存中具有合理的大小)和一点点“胶水” - 即ARRAY_AGG函数

步骤如下:

  1. 使用类型为ARRAY<T>的输入参数创建UDF,其中T是您要聚合的值的类型。
  2. 使用查询中的ARRAY_AGG函数和GROUP BY子句生成T数组并传入UDF。
  3. 作为一个具体的例子:

    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