← 全部项目

02 · 已上线

零售分析数据湖仓

把 CRM、订单和三个广告平台的数据统一进一个有治理的湖仓——对生产数据库零负载。

时间
2025年2月 – 2026年3月
角色
数据工程师 · 思源数智
技术栈
Databricks · dbt · Fivetran · AWS · Power BI · Python
CRM 与订单表
40+
每月 CDC 同步行数
~10万
个广告平台打通
3

问题

市场团队想知道:哪些区域的广告投放真正带来了复购?答案分散在 CRM、订单系统(OMS)和三个广告平台里,而订单数据只能直接查询生产数据库。

我做了什么

在 Databricks 上搭建端到端的数据湖仓,分两条独立的摄取路径:

  • CRM 和订单: 先把源数据库拆成写主库和基于 WAL 的读副本,Fivetran CDC 只连接读副本,同步永远不碰生产库。
  • 广告平台: 用 Python 通过 REST API 拉取 Amazon Selling Partner、Google Ads 和 Meta Ads 的数据。

在 Databricks 内部,dbt 模型严格遵循 Medallion 分层:Bronze 保持源数据原貌,Silver 承载全部业务规则,Gold 以星型模型提供给 Power BI。

关键设计决策

  1. WAL 读副本:CDC 只读副本,生产库零同步负载。
  2. 逻辑只写一次:全部业务规则放在 Silver 的 int_* 模型里;复购标记体现为 fct_orders.is_repurchase。
  3. dim_geography 桥接:把订单区域和广告投放区域映射到同一个键。
  4. ROI 作为度量值:在 Power BI 中计算,任意时间窗口都能正确汇总。
架构图——零售湖仓:两条摄取路径进入 Databricks 上的 dbt Medallion 模型,最终供两个 Power BI 模型使用。

CRM 与订单数据经 WAL 读副本和 Fivetran CDC 进入 Databricks;三个广告平台通过 Python REST 任务接入。Silver 层把原始表加工成客户、订单、订单明细和每日广告花费;客户与订单组合成客户订单,再生成复购标记;广告花费结合地理参考表生成区域广告归因。Gold 层包含事实表(订单、订单明细、广告花费)和维度表(日期、客户、商品、渠道、地理),最终供复购 × 折扣和区域广告效果两个模型使用。

结果

  • 约 40 张 CRM 和订单表,加上 3 个广告 API,统一到一个有治理的分析平台。
  • 每月约 10 万行数据经 CDC 同步,对生产数据库零影响。
  • 两个 Power BI 模型上线: 区域广告效果分析,以及复购 × 折扣相关性分析。

关键决策

  • 业务逻辑只写一次。 去重、状态规则和复购标记都在 Silver 层定义,所有数据集市直接继承。
  • 用桥接维度对齐区域。 订单区域和广告投放区域没有共同的键,于是都映射到统一的 dim_geography。
  • ROI 做成度量值,而不是字段。 在 Power BI 里计算 ROI,任何时间窗口下都能正确汇总。