BigQuery自定义函数(按位函数)问题

时间:2018-11-13 21:30:00

标签: google-bigquery

我试图创建一个自定义函数来执行一些科学的对数数学,但是我不理解错误。

在postgreSQL或大多数其他SQL和编程语言中,就这么简单:

acc = 10^(val/10)

在BigQuery中,当我创建TEMP函数和SQL时

   CREATE TEMP FUNCTION to_acc(x NUMERIC) AS (10^(x/10));
   SELECT val, to_acc(10) AS result

我收到以下错误:

> Bitwise operator ^ requires two integer/BYTES arguments of the same
> type, but saw DOUBLE and NUMERIC; failed to parse CREATE [TEMP]
> FUNCTION statement at [1:108]

所以按位运算符仅适用于整数/字节...。我们所有的数据都是浮点数...

这是BigQuery的限制吗?还是有办法解决?

2 个答案:

答案 0 :(得分:1)

据我所知,运算符^在BigQuery中的功能与在PostgreSQL中的功能不同。

在PostgreSQL中,它是幂运算符,而在BigQuery中,它执行XOR(实际上仅适用于整数和字节)。根据您的用例说明,我相信您想计算出10的(val / 10)次方。

为此,您可以尝试使用内置的标准SQL mathematical functions

答案 1 :(得分:1)

显然你想要这个:

#standardSQL
SELECT POW(10, (x/10))
FROM (SELECT 30.7 x)

POW(X, Y)为:

  

将X的值返回到Y的幂。

请注意,在大多数编程语言中,^表示XOR,而不是指数运算。相反,Posgtres选择对#使用非常不传统的XOR。查看一些历史详细信息: