基于 Couchbase 的数仓建模方案

以下是一份基于 Couchbase 的数仓建模方案,结合你的业务需求(订单、支付、退款业务)以及报表需求(营收报表、优惠报表、支付方式报表),为 ODS、DWD、DWS、ADS 层提供了存储方式、库名、表名的标准化设计。


1. Couchbase 数仓建模原则

  1. Scopes 对应库(Schemas):

    • 一个 Scope 代表一个逻辑数据库,主要根据层级划分:ODS、DWD、DWS、ADS。
    • Scope 名称采用 数仓层级:业务域 格式(如 ods:order、dws:payment)。
  2. Collections 对应表(Tables):

    • 每个 Collection 对应一张表,表名建议标准化为 业务域:主题。
    • 采用 JSON 文档存储数据,每个文档代表一条记录,支持嵌套字段。
  3. 分区策略:

    • 按业务域(如订单、支付、退款)或时间分区(如按日期、月份)。
    • 分区键建议选用访问频率高且查询条件常用的字段(如 order_id、payment_id、date)。
  4. 索引策略:

    • 每个 Collection 至少有一个主键索引(PRIMARY INDEX)。
    • 根据查询需求添加二级索引,例如时间字段索引(date)、业务主键索引(order_id、payment_id)。

2. 数仓层级设计

ODS 层(原始数据层)

  • 特点:存储从源系统直接采集的原始数据,贴近业务系统,按业务域划分。
  • Scope 名称 :ods:业务域
  • Collections(表名)标准化 :
    • 命名格式:业务域:数据来源
    • 数据尽量按照业务记录,字段多保持原样。
Scope Collection 名称 说明 分区键 示例字段
ods:order order:raw 订单业务原始数据 order_id order_id, customer_id
ods:payment payment:raw 支付业务原始数据 payment_id payment_id, order_id
ods:refund refund:raw 退款业务原始数据 refund_id refund_id, payment_id

DWD 层(明细数据层)

  • 特点:对 ODS 数据进行清洗和规范化,打平嵌套结构,按主题存储明细数据。
  • Scope 名称 :dwd:业务域
  • Collections(表名)标准化 :
    • 命名格式:业务域:主题
    • 数据以明细记录为主,具备较高查询效率。
Scope Collection 名称 说明 分区键 示例字段
dwd:order order:detail 清洗后的订单明细 order_id order_id, customer_id
dwd:payment payment:detail 清洗后的支付明细 payment_id payment_id, payment_type
dwd:refund refund:detail 清洗后的退款明细 refund_id refund_id, refund_reason

DWS 层(汇总数据层)

  • 特点:基于 DWD 数据进行轻量汇总,支持多维分析,通常按照主题域划分。
  • Scope 名称 :dws:业务域
  • Collections(表名)标准化 :
    • 命名格式:主题域:汇总维度
    • 数据按维度聚合存储,支持 OLAP 查询。
Scope Collection 名称 说明 分区键 示例字段
dws:order order:daily_summary 每日订单汇总 date date, total_orders, total_sales
dws:payment payment:method_summary 每种支付方式的每日汇总 date date, payment_type, total_amt
dws:refund refund:reason_summary 每种退款原因的每日汇总 date date, refund_reason, refund_amt

ADS 层(应用数据层)

  • 特点:为具体的报表和分析需求提供高性能的数据支持。数据通常是面向特定报表需求设计的,便于前端直接查询。
  • Scope 名称 :ads:报表主题
  • Collections(表名)标准化 :
    • 命名格式:报表主题:具体报表
    • 数据是高度聚合后的结果表。
Scope Collection 名称 说明 分区键 示例字段
ads:revenue revenue:report 营收报表 date date, total_revenue, discount
ads:discount discount:report 优惠报表 date date, total_discount, count
ads:payment payment:report 支付方式分布报表 date date, payment_type, total_amt

3. 建模示例:营收报表

假设需要生成营收报表,查询条件包括 今日、昨日、本周、本月、上月、自定义日期范围,具体建模和数据流设计如下:

  1. ODS 层:

    • 收集订单业务、支付业务的原始数据。
    • Scope: ods:order
    • Collection: order:raw
  2. DWD 层:

    • 从 ODS 数据中提取订单明细和支付明细。
    • Scope: dwd:order
    • Collection: order:detail, payment:detail
  3. DWS 层:

    • 按天汇总订单金额和支付方式金额。
    • Scope: dws:order
    • Collection: order:daily_summary
  4. ADS 层:

    • 生成营收报表,包括总营收、优惠金额、支付方式分布等。
    • Scope: ads:revenue
    • Collection: revenue:report

4. 标准化命名规则总结

  • Scopes(库):

    • 格式:数仓层级:业务域 或 数仓层级:报表主题。
    • 示例:ods:order、dws:payment、ads:revenue。
  • Collections(表):

    • 格式:业务域:主题 或 报表主题:具体报表。
    • 示例:order:detail、revenue:report。

5. 索引策略

  1. Primary Index:

    • 每个 Collection 都需要创建主键索引。
  2. Secondary Index:

    • 按查询需求创建,如:
      • CREATE INDEX idx_date ON dws:order:daily_summary(date);
      • CREATE INDEX idx_payment_type ON dwd:payment:detail(payment_type);

这套方案实现了 分层存储 、命名规范化 和 高效查询支持,既适配你的 Couchbase 数据仓库,也能满足复杂的对账报表需求。

相关推荐
geovindu8 小时前
SQL Data Sampling and Approximation Techniques using postgreSQL 18
大数据·数据库·数据仓库·sql·postgresql·数据库开发·数据库架构
程序员梅雨1 天前
【从零开始学习数据仓库 | 第一篇】:维度建模理论
大数据·数据仓库·学习·阿里云·数据分析
棣廷1 天前
初识数据仓库——数仓分层到DataX数据采集
数据仓库
棣廷1 天前
初识Hive(2)
数据仓库·hive·hadoop
得帆低代码PaaS2 天前
一张 Excel 台账什么时候该迁成应用:四个信号、五步迁移与权限设计
低代码·数据建模·权限管理·系统迁移·制造业
geovindu2 天前
Pivoting and Unpivoting Data in SQL using postgreSQL 18
大数据·数据库·数据仓库·sql·postgresql·数据库开发·数据库架构
数据库小学妹2 天前
OLAP数据库怎么选?看清OLTP、数仓、湖仓边界
数据仓库·mpp·列式存储·联机分析处理·数据库选型·olap数据库
程序 代码狂人3 天前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
天河归来3 天前
从原始消息到业务数据:三层数据架构的设计与实践
数据库·数据仓库·架构