Обходные пути для эмуляции UDF для оконных агрегатов в BigQuery?
Я пытаюсь писать собственные агрегатные функции в BigQuery. В PGSQL я могу писать определяемые пользователем агрегатные функции, которые можно использовать с
over
предложение, но я не могу написать такие агрегатные функции для BigQuery - можно ли написать функцию, которая принимает весь массив столбца раздела и возвращает значение на основе некоторого пользовательского вычисления?
Пример того, что я пробовал:
CREATE OR REPLACE FUNCTION temp_db.temp_func(arr ARRAY<int64>)
RETURNS int64 LANGUAGE js AS """
return arr.length*10 //example calculation
//actual result involves looping over the array and doing few calculations
""";
select s_id, temp_db.temp_func(s_price) over (partition by s_id order by s_date rows 40 preceding) as temp_col
from temp_db.s_table;
Это дает ошибку:
Query error: Function temp_db.temp_func does not support an OVER clause at [6:19]
В существующих агрегатных функциях не являются достаточными для моей цели, поэтому мне нужно, чтобы быть в состоянии выполнить пользовательские вычисления над пользовательскими размерами окна. Есть ли какие-то обходные пути в BigQuery?
1 ответ
CREATE OR REPLACE FUNCTION temp_db.temp_func(arr ARRAY<int64>)
RETURNS int64 LANGUAGE js AS """
return arr.length*10 //example calculation
//actual result involves looping over the array and doing few calculations
""";
select s_id, temp_db.temp_func(ARRAY_AGG(s_price) over (partition by s_id order by s_date rows 40 preceding)) as temp_col
from temp_db.s_table;