2017-01-11 2 views
1

Я использую устаревшую SQL Google BigQuery на некоторое время, и когда мне нужно число Пи, есть удобный PI функция():BigQuery: PI() в стандарте SQL

SELECT PI() 

Но в стандарте SQL, эта функция больше не существует. Я не смог найти эквивалентную функцию в документах. Какой был бы самый простой и самый точный способ иметь эквивалент функции PI() в стандартном SQL?

+0

Я удалил тег sql-сервера, я бы не включил его. Я ищу эту функцию специально, используя стандартный SQL-язык BigQuery. – Konrad

ответ

7

Еще одна альтернатива заключается в использовании встроенных тригонометрических функций - дуга косинус -1 будет точно PI:

SELECT ACOS(-1)

приводит

Row f0_ 
1 3.141592653589793 

Если вы используете ACOS (- 1) внутри вашего запроса он будет автоматически сгибаться оптимизатором и вычисляться только один раз.

+1

Жаль, что я могу проголосовать за один и тот же ответ несколько раз! этот, безусловно, заслуживает этого! –

+0

Согласитесь, Михаил! Умная. Это должен быть принятый ответ наверняка! Хотя мой ответ в настоящее время имеет больше всего голосов ;-) @ Konrad - вы это видели? –

4

Вы считаете себя правильным. Я также не могу найти соответствующую функцию PI в стандартном SQL.

https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#mathematical-functions

Может быть Googler может подтвердить, что это просто не доступна в стандартном SQL. Но до тех пор, как обходной путь, как насчет использования очень простой UDF? Это немного неуклюжим, но может сделать трюк:

CREATE TEMPORARY FUNCTION PI() 
RETURNS FLOAT64 
LANGUAGE js AS """ 
    return Math.PI; 
"""; 
SELECT PI() as PI 

enter image description here

Наследство SQL в качестве сравнения:

enter image description here

+0

Спасибо, это тоже то, что ответила мне Служба поддержки Google. – Konrad

1

Вы можете определить функцию SQL, которая имеет меньше накладные расходы, чем при использовании JavaScript:

CREATE TEMP FUNCTION PI() AS (3.141592653589793); 

Если такая константа важна для вас, вы можете найти запрос функции на issue tracker.

+0

Отличная идея, спасибо. – Konrad

Смежные вопросы