临时表为什么要有规范
临时表与测试表是开发期最常见的元数据污染源。它们没有 Owner、没有生命周期约定时,会沉淀成事实上的生产表,既占存储又让人不敢删。规范的核心是三点:可识别的命名前缀、明确的责任人、明确的存在期限。
基本信息
| 临时表命名 | tmp_ 前缀 + 日期 + 负责人标识 |
|---|---|
| 测试表命名 | test_ 前缀,放在测试库或临时库 |
| 存放位置 | 独立临时库或独立 schema,避免混入正式库 |
| 生命周期 | 任务结束即删除,最多不超过约定天数 |
| 巡检口径 | 超期未清理的表纳入日常巡检告警 |
典型使用场景
- 中间结果落地:复杂多步计算需要复查中间数据时临时落表
- 问题排查:复现线上口径差异,用临时表留住当时的快照
- 数据核对:把两套口径的结果并排放进临时表逐行比对
- 旁路试算:新口径上线前先试跑,不影响生产链路
- 权限受限场景:无法建正式表时用临时表过渡
临时表用法
临时表用法
-- 命名带日期与负责人,一眼看出归属和过期时间
DROP TABLE IF EXISTS tmp_20261012_zhang_order;
CREATE TABLE tmp_20261012_zhang_order AS
SELECT order_id, pay_amt
FROM dwd_trade_order_di
WHERE dt = '2026-10-12'; -- 只取本次排查需要的数据
-- 用完立即清理,不要留给下一位同事猜
DROP TABLE IF EXISTS tmp_20261012_zhang_order;
-- 能用一条查询解决的场景直接写 CTE,不落表最干净
-- WITH base AS (SELECT ...) SELECT ... FROM base;表类型对照
| 表类型 | 前缀 | 位置 | 生命周期 |
|---|---|---|---|
| 临时表 | tmp_ | 临时库或独立 schema | 任务结束即删,最长 7 天 |
| 测试表 | test_ | 测试库 | 随测试用例生命周期 |
| 备份表 | bak_ | 备份库或历史分区 | 按保留策略定期清理 |
| 正式表 | 无特殊前缀 | 生产库 | 长期维护,需文档与 Owner |
把临时表数量与超期天数纳入巡检指标是成本最低的治理手段:超过保留期限的自动列出并通知创建人,能避免元数据里堆积大量无人认领的表。
test_ 前缀的表长期留在正式库会带来两个问题:数据集市目录与权限审计被污染,且下游可能误把它当成可用数据源引用,随后被清理时引发下游报错。