Google bigquery “dataset.table”中的rray_agg(结构(id为id,val为val)))`
下面是针对BigQuery标准SQL的Google bigquery “dataset.table”中的rray_agg(结构(id为id,val为val)))`,google-bigquery,user-defined-functions,Google Bigquery,User Defined Functions,下面是针对BigQuery标准SQL的 #standardSQL CREATE TEMP FUNCTION SumDistinct(arr ANY TYPE) AS (( SELECT AS STRUCT COUNT(DISTINCT id) unique_ids, SUM(val) total_value FROM ( SELECT ANY_VALUE(t).* FROM UNNEST(arr) t GROUP BY FORMAT('%t',
#standardSQL
CREATE TEMP FUNCTION SumDistinct(arr ANY TYPE) AS ((
SELECT AS STRUCT
COUNT(DISTINCT id) unique_ids,
SUM(val) total_value
FROM (
SELECT ANY_VALUE(t).*
FROM UNNEST(arr) t
GROUP BY FORMAT('%t', t)
)
));
SELECT SumDistinct(ARRAY_AGG(STRUCT(id, val))).*
FROM `project.dataset.data`
如果要应用于您问题中的样本数据-结果为
Row unique_ids total_value
1 3 600
下面是BigQuery标准SQL
#standardSQL
CREATE TEMP FUNCTION SumDistinct(arr ANY TYPE) AS ((
SELECT AS STRUCT
COUNT(DISTINCT id) unique_ids,
SUM(val) total_value
FROM (
SELECT ANY_VALUE(t).*
FROM UNNEST(arr) t
GROUP BY FORMAT('%t', t)
)
));
SELECT SumDistinct(ARRAY_AGG(STRUCT(id, val))).*
FROM `project.dataset.data`
如果要应用于您问题中的样本数据-结果为
Row unique_ids total_value
1 3 600
通常,自定义项按行/记录工作。因此
选择X,Y,udf\u添加(X,Y)作为Z
在每行的基础上工作。它不会将表中的所有X
和Y
值相加并进行聚合。您可以将值放入数组,将该数组传递给UDF,然后在UDF中的该数组上尝试您的逻辑。找到一个不同的查询模式(可能是CTE)来解决您的问题可能会更容易。您提供的示例非常自然地适合简单的SQL语句,但您为什么实际希望在UDF中实现这个查询模式呢?了解您的确切用例将有助于我们帮助您通常情况下,UDF是按行/记录工作的。因此选择X,Y,udf\u添加(X,Y)作为Z
在每行的基础上工作。它不会将表中的所有X
和Y
值相加并进行聚合。您可以将值放入数组,将该数组传递给UDF,然后在UDF中的该数组上尝试您的逻辑。找到一个不同的查询模式(可能是CTE)来解决您的问题可能会更容易。您提供的示例非常自然地适合简单的SQL语句,但您为什么实际希望在UDF中实现这个查询模式呢?了解您的具体用例将有助于我们帮助您我通常会这样做,但我正在寻找一种可用于UDFI的解决方案我通常会这样做,但我正在寻找一种可用于UDF的解决方案
Row unique_ids total_value
1 3 600