BigQuery поддерживает постоянные пользовательские функции.Для начала см. документацию .
Например, вот оператор CREATE FUNCTION
, который создает функцию для вычисления медианы массива:
CREATE FUNCTION dataset.median(arr ANY TYPE) AS (
(
SELECT
IF(
MOD(ARRAY_LENGTH(arr), 2) = 0,
(arr[OFFSET(DIV(ARRAY_LENGTH(arr), 2) - 1)] + arr[OFFSET(DIV(ARRAY_LENGTH(arr), 2))]) / 2,
arr[OFFSET(DIV(ARRAY_LENGTH(arr), 2))]
)
FROM (SELECT ARRAY_AGG(x ORDER BY x) AS arr FROM UNNEST(arr) AS x)
)
);
После выполнения этого оператора вы можете сослаться на него в следующем запросе:
SELECT dataset.median([7, 1, 2, 10]) AS median;