我已经使用Google BigQuery的传统SQL一段时间了,当我需要数值Pi时,有一个方便的PI()函数:
SELECT PI()
但在标准SQL中,这个函数已经不存在了。我无法在文档中找到一个等价的函数。那么在标准SQL中获得PI()函数的最简单、最准确的方法是什么呢?
我已经使用Google BigQuery的传统SQL一段时间了,当我需要数值Pi时,有一个方便的PI()函数:
SELECT PI()
但在标准SQL中,这个函数已经不存在了。我无法在文档中找到一个等价的函数。那么在标准SQL中获得PI()函数的最简单、最准确的方法是什么呢?
另一个选择是使用内置的三角函数 - 反余弦函数 -1 的结果将正好是 PI:
SELECT ACOS(-1)
得到的结果是
Row f0_
1 3.141592653589793
如果您在查询中使用ACOS(-1),它将被优化器自动折叠并仅计算一次。
您似乎是正确的。在标准SQL中,我也找不到相应的PI
函数。
也许谷歌员工可以确认它在标准SQL中目前还没有可用。但在此之前,您可以使用一个非常简单的UDF作为解决方法。它有点笨重,但可能能起到作用:
CREATE TEMPORARY FUNCTION PI()
RETURNS FLOAT64
LANGUAGE js AS """
return Math.PI;
""";
SELECT PI() as PI
与传统SQL的比较:
您可以定义一个SQL函数,它的开销比使用JavaScript要少:
CREATE TEMP FUNCTION PI() AS (3.141592653589793);