如何在BigQuery中创建获取供应商最新记录的Materialized View?
实现仅保留最新供应商记录的增量物化视图方案
针对你的场景(基表仅追加数据,需保留每个Supplier_ID的最新记录),可以用QUALIFY子句+窗口函数的方案,既规避增量物化视图的单表引用限制,又不用重复调用聚合函数,适配多字段场景:
核心SQL语句
CREATE MATERIALIZED VIEW test_dataset.supplier_latest_mv OPTIONS ( refresh_interval_minutes = 60 -- 根据你的需求调整刷新间隔 ) AS SELECT Supplier_ID, Supplier_Name, Supplier_Contact, Last_Modified -- 其他需要保留的字段直接在这里追加即可 FROM test_dataset.test_table QUALIFY ROW_NUMBER() OVER ( PARTITION BY Supplier_ID ORDER BY Last_Modified DESC ) = 1;
方案优势
- 仅单次引用基表,完全符合增量物化视图“不能重复引用同一张表”的限制,不会触发报错。
- 逻辑直观:通过
ROW_NUMBER()按Supplier_ID分组,按Last_Modified倒序排序,直接筛选出每组的第一条(最新)记录。 - 适配多字段场景:不管是6列还是更多,只要在
SELECT里列出所有需要保留的字段就行,不需要修改窗口函数部分,比ARRAY_AGG简洁太多。
特殊情况处理
如果存在同一Supplier_ID在同一时间有多条记录的情况,可以在排序规则里加一个唯一字段(比如数据插入时的自增ID)来确保结果稳定:
QUALIFY ROW_NUMBER() OVER ( PARTITION BY Supplier_ID ORDER BY Last_Modified DESC, Insert_ID DESC -- Insert_ID为自增唯一字段 ) = 1;
内容的提问来源于stack exchange,提问作者Ashok KS
相关产品推荐
相关产品推荐

