2017-01-11 5 views
1

私はしばらくの間、グーグルのBigQueryのレガシーSQLを使用してきたと私は数パイを必要とするとき、便利なPI()関数があります:のBigQuery:標準SQLでPI()

SELECT PI() 

が、標準では、 SQLでは、この関数は存在しません。私はドキュメントで同等の機能を見つけることができませんでした。 Standard SQLでPI()関数に相当する最も簡単で正確な方法は何でしょうか?

+0

私はsql-serverタグを削除しましたが、それを含めてはいけません。私はBigQueryの標準SQL言語を使ってこの関数を特に探しています。 – Konrad

答えて

7

さらに別の代替は、内蔵の三角関数を使用することである - の-1アークコサインが正確にPIになります:あなたはACOSを(使用している場合

Row f0_ 
1 3.141592653589793 

SELECT ACOS(-1)

結果 - 1)クエリ内では、オプティマイザによって自動的に定数が折り返され、1回だけ計算されます。

+1

私は同じ回答を複数回投票することができれば幸いです!これは間違いなくそれに値する! –

+0

ミハイルに同意する!スマート。これは確かに受け入れられた答えでなければなりません!私の答えは現在最も投票していますが;-) @Konrad - あなたはこれを見ましたか? –

4

あなたは正しいようです。私はまた、標準SQLで対応するPI関数を見つけることができません。

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

たぶん、Google社員は、それが標準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

関連する問題