Судя по комментариям, вы хотите, чтобы UDF мог вызывать функцию агрегирования внутри. Возможно, вы ищете пользовательскую статистическую функцию, которая не поддерживается в BigQuery, но может быть выполнена в следующей форме:
Вывод не соответствует ожидаемому, поскольку UDF не может вывести 2 столбца, как в вашем примере, надеюсь, у вас есть идея, что вам нужно array_agg () поле и ваш UDF выполняет UNNEST () внутри и сможет использовать агрегирующие функции системы, такие как SUM ():
CREATE TEMP FUNCTION sumdistinct (unique_key INT64, val_array ARRAY<INT64>) AS (
(SELECT COALESCE(ROUND(COALESCE(CAST((SUM(DISTINCT (CAST(ROUND(COALESCE(safe_cast(val_to_sum as float64) ,0)*(1/1000*1.0), 9) AS NUMERIC) + (cast(cast(concat('0x', substr(to_hex(md5(CAST(unique_key AS STRING))), 1, 15)) as int64) as numeric) * 4294967296 + cast(cast(concat('0x', substr(to_hex(md5(CAST(unique_key AS STRING))), 16, 8)) as int64) as numeric)) * 0.000000001 )) - SUM(DISTINCT (cast(cast(concat('0x', substr(to_hex(md5(CAST(unique_key AS STRING))), 1, 15)) as int64) as numeric) * 4294967296 + cast(cast(concat('0x', substr(to_hex(md5(CAST(unique_key AS STRING))), 16, 8)) as int64) as numeric)) * 0.000000001) ) / (1/1000*1.0) AS FLOAT64), 0), 6), 0)
FROM unnest(val_array) val_to_sum)
);
with data as
(select 1 as id, 100 as val union all
select 1, 100 union all
select 1, 100 union all
select 2, 200 union all
select 2, 200 union all
select 3, 300 union all
select 3, 300
)
SELECT sumdistinct(id, array_agg(val))
FROM data
GROUP BY id