BigQuery:标准SQL中的PI()

3

我已经使用Google BigQuery的传统SQL一段时间了,当我需要数值Pi时,有一个方便的PI()函数:

SELECT PI()

但在标准SQL中,这个函数已经不存在了。我无法在文档中找到一个等价的函数。那么在标准SQL中获得PI()函数的最简单、最准确的方法是什么呢?


我已经删除了sql-server标签,我不应该包含它。我特别使用BigQuery的标准SQL语言寻找这个函数。 - Konrad
4个回答

18

另一个选择是使用内置的三角函数 - 反余弦函数 -1 的结果将正好是 PI:

SELECT ACOS(-1)

得到的结果是

Row f0_  
1   3.141592653589793

如果您在查询中使用ACOS(-1),它将被优化器自动折叠并仅计算一次。


1
我希望我可以多次投票支持同一个答案!这个绝对值得! - Mikhail Berlyant
同意Mikhail!聪明。这肯定应该成为被接受的答案!尽管我的回答目前有最多的投票;-) @Konrad - 你看到这个了吗? - Graham Polley

4

您似乎是正确的。在标准SQL中,我也找不到相应的PI函数。

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

也许谷歌员工可以确认它在标准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


谢谢,这也是 Google 支持给我的答复。 - Konrad

1

现在BigQuery中有一个实用函数叫做bqutil.fn.pi(),它会返回π的值。

你可以像这样使用它:

SELECT bqutil.fn.pi() AS pi

这里是其工作截图的屏幕快照


1

您可以定义一个SQL函数,它的开销比使用JavaScript要少:

CREATE TEMP FUNCTION PI() AS (3.141592653589793);

如果您认为这样的常量很重要,您可以在问题跟踪器上找到一个功能请求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接