Есть ли у нас SQL Server как пользовательские функции в Google Big Query? - PullRequest
0 голосов
/ 27 сентября 2018

Мы уже давно используем большой запрос в нашей компании.Мы писали некоторую полезную логику многократного использования (скажем, вычисление расстояния в милях между двумя гео-координатами) в наших запросах.Нашел «Пользовательскую функцию (UDF)» в «Большом запросе», что является чем-то, что мне близко, но проблема с UDF заключается в том, что они не могут быть повторно использованы и носят ВРЕМЕННЫЙ характер, поскольку их нельзя сохранить в одном месте и сослаться на запросы.UDF необходимо дублировать для каждого запроса, чтобы они могли быть переданы, или они только локально ссылаются на запрос.

Я ищу что-то очень похожее на пользовательские функции SQL Server / Oracle, которые можно создавать, управлять ими и ссылаться на них.

Есть ли у нас какое-нибудь изящное решение для этого в Большом запросе на сегодняшний день?

1 Ответ

0 голосов
/ 02 июля 2019

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...