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。
关键设计决策
- 1WAL 读副本:CDC 只读副本,生产库零同步负载。
- 2逻辑只写一次:全部业务规则放在 Silver 的
int_*模型里;复购标记体现为fct_orders.is_repurchase。 - 3
dim_geography桥接:把订单区域和广告投放区域映射到同一个键。 - 4ROI 作为度量值:在 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,任何时间窗口下都能正确汇总。