迟绑定视图是什么
迟绑定视图把物理表映射与查询逻辑解耦:下游统一访问一个视图,视图在运行时再指向当前有效的物理表(最新分区、新版本表、新引擎里的同构表)。切换物理实现时只改视图定义,下游 SQL 一行不动。它是数仓里做版本滚动、无损换表和灰度切换的常用手段,代价是多出一层映射需要严格管理,映射一旦写错就是静默指向错误的数据源。
基本信息
| 核心结构 | 视图 + 表映射管理表 |
|---|---|
| 切换动作 | 只改视图定义,下游零改动 |
| 适用场景 | 版本滚动、物理表重建、引擎迁移、灰度 |
| 主要代价 | 映射变更必须留审计记录 |
典型使用场景
- 版本滚动:v1 切 v2 期间下游读视图,先指向 v1 后指向 v2
- 物理表重建:分区表需要整体重写时,在切换窗口完成无损换表
- 引擎迁移:数据从 Hive 迁到 Doris 或湖表,下游 SQL 不用改
- 多环境一致:开发、测试、生产用同名视图指向各自物理表
- 灰度验证:部分查询走新表核对结果,稳定后再统一切换
建法与切换
建法与切换
-- 下游只认这个视图名
CREATE OR REPLACE VIEW v_fact_order AS
SELECT order_id, dt, pay_amt FROM fact_order_v1; -- 当前生效的物理表
-- 切换时只替换这一行,下游 SQL 零改动
CREATE OR REPLACE VIEW v_fact_order AS
SELECT order_id, dt, pay_amt FROM fact_order_v2;
-- 校验:视图与目标表行数、金额必须一致
SELECT count(1) AS rows_cnt, sum(pay_amt) AS amt FROM v_fact_order;映射变更必留字段
| 字段 | 含义 | 为什么要留 |
|---|---|---|
| view_name | 视图名 | 定位受影响的查询范围 |
| target_table | 当前指向的物理表 | 出问题可立刻换回 |
| effective_dt | 生效时间 | 解释某天起数字变化的原因 |
| change_no | 变更单号 | 与评审记录、发布单对齐 |
切换前先备份旧的映射关系并留下变更单:一旦新表有问题,回退动作就是改回一行视图定义。
视图里写 SELECT * 会把上游新增的不兼容列一并带下去,字段顺序或类型变化时下游会静默失败,生产视图建议显式列出字段。