在Big Query中按GUID去重列求和并创建物化视图的方案
解决方案
直接创建满足需求的物化视图即可,无需先创建去重的中间物化视图(BigQuery不支持嵌套物化视图),以下是两种可行的SQL写法:
方法一:先按GUID+DATE分组去重,再按日期求和
CREATE MATERIALIZED VIEW `你的项目ID.你的数据集ID.目标物化视图名` OPTIONS ( refresh_interval_minutes = 60 -- 根据业务需求设置刷新间隔,单位为分钟 ) AS SELECT DATE, SUM(unique_count) AS COUNT FROM ( SELECT GUID, DATE, MAX(COUNT) AS unique_count -- 同一GUID同日期的COUNT值一致,MAX/MIN/ANY_VALUE均可 FROM `你的项目ID.你的数据集ID.原始表名` GROUP BY GUID, DATE ) GROUP BY DATE;
方法二:用窗口函数过滤重复GUID记录,再按日期求和
CREATE MATERIALIZED VIEW `你的项目ID.你的数据集ID.目标物化视图名` OPTIONS ( refresh_interval_minutes = 60 -- 按需设置刷新间隔 ) AS SELECT DATE, SUM(COUNT) AS COUNT FROM ( SELECT COUNT, DATE, GUID, -- 按GUID+DATE分组,给每条记录编号,只保留第一条 ROW_NUMBER() OVER (PARTITION BY GUID, DATE ORDER BY ID) AS rn FROM `你的项目ID.你的数据集ID.原始表名` ) WHERE rn = 1 GROUP BY DATE;
说明
- 两种方法都能实现同一GUID仅统计一次COUNT值,最终按日期汇总当日总和的需求;
- 直接在物化视图中完成去重+求和的逻辑,规避BigQuery不支持嵌套物化视图的限制;
- 需替换SQL中的
你的项目ID、你的数据集ID、原始表名、目标物化视图名为实际信息; refresh_interval_minutes可根据数据更新频率调整,设置为0表示手动刷新。
内容的提问来源于stack exchange,提问作者tylerism
相关产品推荐
相关产品推荐

