3

私はしばらくの間、Google BigQuery のレガシー SQL を使用してきましたが、数値 Pi が必要な場合は、便利な PI() 関数があります。

SELECT PI()

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

4

4 に答える 4

14

さらに別の方法として、組み込みの三角関数を使用することもできます。-1 の逆余弦は正確に P​​I になります。

SELECT ACOS(-1)

結果は

Row f0_  
1   3.141592653589793

クエリ内で ACOS(-1) を使用すると、オプティマイザによって自動的に定数が折りたたまれ、1 回だけ計算されます。

于 2017-01-11T16:52:36.663 に答える
4

あなたは正しいようです。PIまた、標準 SQL に対応する関数が見つかりません。

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

ここに画像の説明を入力

比較としてのレガシー SQL:

ここに画像の説明を入力

于 2017-01-11T11:46:45.903 に答える
1

JavaScript を使用するよりもオーバーヘッドが少ない SQL 関数を定義できます。

CREATE TEMP FUNCTION PI() AS (3.141592653589793);

このような定数を持つことが重要な場合は、 Issue trackerで機能リクエストを見つけることができます。

于 2017-01-11T14:14:22.447 に答える