BigQuery Custom Function (Побитовая функция) Вопрос - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь создать пользовательскую функцию, которая выполняет некоторую научную логарифмическую математику, но я не понимаю ошибку.

В postgreSQL или большинстве других языков SQL и программирования это так просто:

acc = 10^(val/10)

В BigQuery, когда я создаю функцию TEMP и SQL

   CREATE TEMP FUNCTION to_acc(x NUMERIC) AS (10^(x/10));
   SELECT val, to_acc(10) AS result

, я получаю следующую ошибку:

> Bitwise operator ^ requires two integer/BYTES arguments of the same
> type, but saw DOUBLE and NUMERIC; failed to parse CREATE [TEMP]
> FUNCTION statement at [1:108]

Так что побитовый оператор работает только нацелочисленные / байт ....?Все наши данные являются числами с плавающей запятой ...

Это ограничение BigQuery или есть способ обойти это?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Видимо, вы хотите это:

#standardSQL
SELECT POW(10, (x/10))
FROM (SELECT 30.7 x)

С POW(X, Y):

Возвращает значение X, возведенное в степень Y.

Обратите внимание, что в большинстве языков программирования ^ означает XOR, а не возведение в степень. Вместо этого Posgtres решил использовать очень нетрадиционный # для XOR. Посмотрите некоторые исторические детали:

0 голосов
/ 14 ноября 2018

Насколько я знаю, оператор ^ не обладает такой же функциональностью в BigQuery, как в PostgreSQL.

Хотя в PostgreSQL это оператор power, в BigQuery он выполняет XOR (и действительно работает только с целыми числами и байтами).Основываясь на описании вашего сценария использования, я полагаю, что вы хотите рассчитать (val / 10) -й степени 10.

В качестве обходного пути вы можете попробовать встроенные стандартные математические функции SQL .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...