首页/数据/数仓建模速查/当前维度视图与查询裁剪
维度与事实设计149 条

当前维度视图与查询裁剪

多数报表只关心当前值:用 is_current=1 过滤或独立视图暴露当前行,能减少扫描行数并稳定口径。

数仓建模速查数据更新于 2026-10-13

当前视图解决什么

多数报表只关心维度成员的当前值,而 SCD2 维度表里同一个自然键有多行历史版本。用 is_current 过滤,或建一个只暴露当前行的视图,既能减少扫描行数,也让所有下游共用同一套「当前」定义,避免有人忘记加过滤条件而把历史行也算进来。

基本信息

过滤列is_current = 1,或结束日期为最大值
视图形式v_dim_xxx 只包含当前行
收益少扫历史数据,口径统一
风险视图谓词无法下推时退化为全历史扫描
配套优化分区化维度把当前版本集中在最新分区

典型使用场景

  • 报表取数:绝大多数分析只看当前归属,用视图省掉重复的过滤条件
  • 口径统一:下游不再各自判断哪一行算当前版本
  • 性能优化:历史版本很多时按当前标志过滤可显著减少扫描
  • 权限隔离:视图只暴露当前行,历史敏感属性不被随意读取
  • 下游开发:新同事默认引用当前视图,降低出错概率

当前视图的建法与用法

当前视图的建法与用法
-- 当前视图:每个自然键只暴露当前版本
CREATE VIEW v_dim_customer AS
SELECT customer_id, name, tier, city, start_date
FROM dim_customer
WHERE is_current = 1;

-- 查询侧直接引用视图,不再重复写过滤条件
SELECT tier, count(1) AS cnt
FROM v_dim_customer
GROUP BY tier;

三种取数对象

对象数据范围适用场景
维度全量表包含全部历史版本历史归属回溯、时点分析
当前视图每键一行当前版本日常报表、维度关联
分区分层表当前版本集中在最新分区大维度按分区裁剪
混用当前视图与历史表最容易出错:同一份报表里一个指标按当前视图算、另一个按历史全量表算,同期数据就会对不上,而且很难看出是口径问题。
视图谓词能否下推决定性能:部分引擎在视图外层再加过滤时无法下推,仍会扫描全部历史数据,这种情况要改成物化的当前版本表。

易错点

  • 混用当前视图与历史表:同一报表内两个指标同期数据对不上
  • 视图谓词无法下推:性能退化成全历史扫描,查询超时
  • 视图内再关联其他维度:关联逻辑变更需要重建视图,影响面被低估
  • 当前标志不唯一:一个自然键出现多个当前行,关联后行数翻倍
  • 把当前视图当历史表用:回溯分析拿不到历史归属,结论错误

数据来源与参考

  • 数仓实践:维度当前视图
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌