BigQuery:标准 SQL 中的 PI()
BigQuery: PI() in Standard SQL
我一直在使用 Google BigQuery 的遗留 SQL 一段时间,当我需要数字 Pi 时,有一个方便的 PI() 函数:
SELECT PI()
但是在标准SQL中,这个功能已经不存在了。我一直无法在文档中找到等效的函数。在标准 SQL 中获得与 PI() 函数等效的最简单、最准确的方法是什么?
看来你是对的。我也无法在标准 SQL.
中找到对应的 PI
函数
也许 Google 员工可以确认它在标准 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);
如果拥有这样一个常量对您很重要,您可以在 issue tracker.
上找到功能请求
另一种选择是使用内置三角函数 - -1 的反余弦将正好是 PI:
SELECT ACOS(-1)
结果
Row f0_
1 3.141592653589793
如果您在查询中使用 ACOS(-1),它将被优化器自动常量折叠并仅计算一次。
BigQuery 中现在有一个名为 bqutil.fn.pi()
的实用函数,它将 return 圆周率的值。
你可以这样使用它:
SELECT bqutil.fn.pi() AS pi
这是一个 screenshot 的实际效果。
我一直在使用 Google BigQuery 的遗留 SQL 一段时间,当我需要数字 Pi 时,有一个方便的 PI() 函数:
SELECT PI()
但是在标准SQL中,这个功能已经不存在了。我一直无法在文档中找到等效的函数。在标准 SQL 中获得与 PI() 函数等效的最简单、最准确的方法是什么?
看来你是对的。我也无法在标准 SQL.
中找到对应的PI
函数
也许 Google 员工可以确认它在标准 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);
如果拥有这样一个常量对您很重要,您可以在 issue tracker.
上找到功能请求另一种选择是使用内置三角函数 - -1 的反余弦将正好是 PI:
SELECT ACOS(-1)
结果
Row f0_
1 3.141592653589793
如果您在查询中使用 ACOS(-1),它将被优化器自动常量折叠并仅计算一次。
BigQuery 中现在有一个名为 bqutil.fn.pi()
的实用函数,它将 return 圆周率的值。
你可以这样使用它:
SELECT bqutil.fn.pi() AS pi
这是一个 screenshot 的实际效果。