在 ETL(抽取、转换、加载)过程中,临时表(Temporary Table)是非常常见且实用的工具,主要用来暂存中间数据、简化复杂逻辑、提升性能、保证数据一致性。下面从「为什么用、怎么用、常见场景、注意事项」几个角度说明。
拆分复杂逻辑
提升性能
保证数据一致性
支持分步调试
TEMPORARY TABLE、PostgreSQL TEMP TABLE)示例(MySQL):
CREATE TEMPORARY TABLE tmp_sales_clean (
user_id INT,
amount DECIMAL(10,2)
);
INSERT INTO tmp_sales_clean
SELECT user_id, amount
FROM ods_sales
WHERE amount > 0;
在 ETL 中人为定义的普通表,如:
etl_tmp_sales_20260121
特点:
WITH 语句):不落盘,逻辑临时WITH clean_data AS (
SELECT * FROM ods_user WHERE status = 1
)
SELECT * FROM clean_data;
ODS → 临时表(清洗) → 临时表(转换) → DW
示例:
-- 1. 去重
CREATE TEMP TABLE tmp_dedup AS
SELECT DISTINCT * FROM ods_order;
-- 2. 格式化
CREATE TEMP TABLE tmp_format AS
SELECT order_id,
TO_DATE(create_time) AS order_date
FROM tmp_dedup;
CREATE TEMP TABLE tmp_user_order AS
SELECT u.user_id, u.name, o.amount
FROM dim_user u
JOIN ods_order o ON u.user_id = o.user_id;
后续只基于 tmp_user_order 做聚合,避免重复 JOIN。
1. 抽取数据 → 临时表
2. 校验、转换
3. INSERT INTO 目标表(一批)
4. 清空临时表
INSERT INTO tmp_error_log
SELECT * FROM ods_data
WHERE amount < 0 OR user_id IS NULL;
##temp 表(SQL Server)CREATE TEMPORARY VIEW tmp_sales AS
SELECT * FROM sales WHERE dt='2026-01-21';
及时清理
DROP避免数据膨胀
并发问题
事务控制
ETL 中的临时表 = 数据处理的“中转站”,用来把复杂、脏、大的数据,逐步变成干净、小、可用的数据,再安全地写入目标系统。
如果你用的是 具体数据库(MySQL / Hive / Oracle / SQL Server)或 ETL 工具,我可以给你更贴合的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。