3

我一直在使用 Google BigQuery 的旧版 SQL,当我需要数字 Pi 时,有一个方便的 PI() 函数:

SELECT PI()

但是在标准 SQL 中,这个函数不再存在。我一直无法在文档中找到等效的功能。在标准 SQL 中具有等效 PI() 函数的最简单、最准确的方法是什么?

4

4 回答 4

14

另一种选择是使用内置三角函数 - -1 的反余弦将恰好是 PI:

SELECT ACOS(-1)

结果是

Row f0_  
1   3.141592653589793

如果您在查询中使用 ACOS(-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

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

CREATE TEMP FUNCTION PI() AS (3.141592653589793);

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

于 2017-01-11T14:14:22.447 回答
1

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

你可以像这样使用它:

SELECT bqutil.fn.pi() AS pi

这是它的屏幕截图

于 2022-01-11T02:14:43.297 回答