我试图创建一个自定义函数来执行一些科学的对数数学,但是我不理解错误。
在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的限制吗?还是有办法解决?
答案 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
。查看一些历史详细信息: