Обходные пути для эмуляции 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;
Другие вопросы по тегам