首页/数据/数据工程与 ETL 速查/数仓转换常用 SQL 模式
本包目录(311 条)
管道基础52 条
Kafka64 条调度与编排40 条数仓建模52 条数据质量50 条CDC 与同步53 条

数仓转换常用 SQL 模式

日常加工大多落在几类模式上:按维度聚合、取最新一条、维表补全、窗口排名、区间累计。掌握这些模式,多数层间加工不必引入复杂框架。

按维度聚合 + 取最新一条

按维度聚合 + 取最新一条
-- 按渠道每日汇总
SELECT dt, channel, SUM(amount) AS amount
FROM dwd_order
WHERE dt BETWEEN '2026-10-01' AND '2026-10-11'
GROUP BY dt, channel;

-- 每个用户最近一笔订单
SELECT * FROM (
  SELECT o.*, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY ts DESC) AS rn
  FROM dwd_order o
) t WHERE rn = 1;

维表补全(先去重再关联)

维表补全(先去重再关联)
SELECT o.order_id, c.channel_name
FROM dwd_order o
LEFT JOIN (
  SELECT channel_code, MAX(channel_name) AS channel_name
  FROM dim_channel GROUP BY channel_code
) c ON o.channel_code = c.channel_code;
join 前不去重维表会放大行数,导致金额重复累计,是汇总对不上的高频原因。

易错点

  • 窗口函数在 WHERE 之后执行,过滤 rn 必须再包一层子查询
  • LEFT JOIN 维表缺失时补 NULL 还是默认值要统一,否则下游汇总口径漂移

数据来源与参考

  • Kimball《The Data Warehouse Toolkit》维度建模与聚合模式
  • Apache Hive LanguageManual:窗口函数
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌