google-bigquery - BigQuery 中的 Sum Distinct by key(或对称聚合)函数

标签 google-bigquery user-defined-functions

我正在尝试通过对 key 进行重复数据删除来对扇形/重复的值求和。 Looker 将其称为对称聚合。我想使用持久的 UDF 而不是依赖子查询。 Looker 有一个非常优雅的解决方案,似乎可以将其烘焙到 UDF 中。

我尝试过:

CREATE OR REPLACE FUNCTION `fn.sumdistinct`(unique_key ANY TYPE, val_to_sum ANY TYPE) AS (
 COALESCE(ROUND(COALESCE(CAST((SUM(DISTINCT (CAST(ROUND(COALESCE(safe_cast(val_to_sum as float64) ,0)*(1/1000*1.0), 9) AS NUMERIC) + (cast(cast(concat('0x', substr(to_hex(md5(CAST(unique_key  AS STRING))), 1, 15)) as int64) as numeric) * 4294967296 + cast(cast(concat('0x', substr(to_hex(md5(CAST(unique_key  AS STRING))), 16, 8)) as int64) as numeric)) * 0.000000001 )) - SUM(DISTINCT (cast(cast(concat('0x', substr(to_hex(md5(CAST(unique_key  AS STRING))), 1, 15)) as int64) as numeric) * 4294967296 + cast(cast(concat('0x', substr(to_hex(md5(CAST(unique_key  AS STRING))), 16, 8)) as int64) as numeric)) * 0.000000001) )  / (1/1000*1.0) AS FLOAT64), 0), 6), 0)
);

但我得到:

Invalid function fn.sumdistinct. Aggregate function SUM not allowed in templated SQL function call

我正在寻找一个可以改变这个的函数:

id   val
1    100
2    200
2    200
3    300
3    300
3    300

进入:

unique_ids  total_value
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 

关于google-bigquery - BigQuery 中的 Sum Distinct by key(或对称聚合)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58960009/

相关文章:

sql-server - 哈希函数-sql studio Express

google-bigquery - 在 BigQuery API 中提取作业 - 未找到作业配置对象

Golang BigQuery - 处理包含重复字段的行并将它们 slice

google-bigquery - BigQuery - 6 年订单迁移、表/查询设计

c - 飞机副油箱内的流体运动

sql - 如何在Hive中调用用户定义的函数?

python - 如何在 Python 中安装 gcp?

google-bigquery - BigQuery 联合查询 - 对 Cloud SQL 的性能影响

excel - 添加对 "No help available"Excel、VBA、用户定义函数的帮助

vba - 在不带参数的自定义函数中添加两个单元格