在 BigQuery Java UDF 中对数组求和时出现问题
An issue when doing cumulative sum of an array in BigQuery Java UDF
我需要在 BigQuery Java UDF 中对一个数组求和。对于我在下面给出的示例,我期望结果为:[1,3,6,54,54]。但我得到的是:
谁能告诉我我做错了什么?我是 Java 和 UDF 新手。谢谢!
#Standard SQL
CREATE TEMP FUNCTION
test(a ARRAY<int64>)
RETURNS ARRAY<int64>
LANGUAGE js AS """
n=a.length;
for (var i=1;i<= n-1;i++)
{
a[i]+=a[i-1];
}
return a;
""";
WITH
test AS (
SELECT
[
1,
2,
3,
48,
0] AS a)
SELECT
test(a)
FROM
test
INT64 is not officially supported with JavaScript UDFs此时因为没有64位整数类型。相反,您应该对数值使用 FLOAT64,例如:
#StandardSQL
CREATE TEMP FUNCTION
test(a ARRAY<float64>)
RETURNS ARRAY<float64>
LANGUAGE js AS """
n=a.length;
for (var i=1;i<= n-1;i++)
{
a[i]+=a[i-1];
}
return a;
""";
WITH
test AS (
SELECT
ARRAY<FLOAT64>[
1,
2,
3,
48,
0] AS a)
SELECT
test(a)
FROM
test
我需要在 BigQuery Java UDF 中对一个数组求和。对于我在下面给出的示例,我期望结果为:[1,3,6,54,54]。但我得到的是:
谁能告诉我我做错了什么?我是 Java 和 UDF 新手。谢谢!
#Standard SQL
CREATE TEMP FUNCTION
test(a ARRAY<int64>)
RETURNS ARRAY<int64>
LANGUAGE js AS """
n=a.length;
for (var i=1;i<= n-1;i++)
{
a[i]+=a[i-1];
}
return a;
""";
WITH
test AS (
SELECT
[
1,
2,
3,
48,
0] AS a)
SELECT
test(a)
FROM
test
INT64 is not officially supported with JavaScript UDFs此时因为没有64位整数类型。相反,您应该对数值使用 FLOAT64,例如:
#StandardSQL
CREATE TEMP FUNCTION
test(a ARRAY<float64>)
RETURNS ARRAY<float64>
LANGUAGE js AS """
n=a.length;
for (var i=1;i<= n-1;i++)
{
a[i]+=a[i-1];
}
return a;
""";
WITH
test AS (
SELECT
ARRAY<FLOAT64>[
1,
2,
3,
48,
0] AS a)
SELECT
test(a)
FROM
test