数仓建设

数仓建设

简介

数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

与数据库的区别
  1. 数据库是面向事务的设计,数据仓库是面向主题设计的。
  2. 数据库一般服务于业务系统的,数据仓库一般是服务于分析系统的。
  3. 数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。
  4. 数据库设计是尽量避免冗余,数据仓库在设计是有意引入冗余。
  5. 数据库是为捕获数据而设计,数据仓库是为分析数据而设计。
  6. 数据库一般会对数据进行增删改查,数据仓库一般只对进行增和查,基本不会修改数据。
现状
  1. 每次需要看公司业绩等各种指标,都单纯从现有的业务系统中去捞取数据,无疑会给系统带来很大的压力,造成大量的资源浪费(业务系统是针对流畅完整的业务流程设计的,并没有考虑统计分析使用)。
  2. 数据业务知识散乱,数据分析与应用成本高。
  3. 缺失数据建设规范,数据开发、表结构定义不统一,数据任务、数据表维护人员单一,基本是创建者,成本高。
数据建模优点
  1. 性能:快速查询数据,减少数据的I/O吞吐(目前公司使用阿里云maxcompute,能感知到的是可以减少任务堵塞)
  2. 成本:减少数据冗余,计算结果复用
  3. 效率:减少重复代码,避免一段SQL多层嵌套、逻辑复杂,提高开发效率
  4. 质量:改善数据统计口径不一致,减少数据计算错误的可能性
数据分层
  • 为什么要做数据分层?

    1. 清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解
    2. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算
    3. 统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径
    4. 复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题
  • 数据分层设计
    在这里插入图片描述

    1. 数据运营层:ODS(Operational Data Store)

      • 功能:
        1. 数据仓库准备区
        2. 为DWD层提供基础原始数据
        3. 减少对业务系统影响
      • 方式
        1. 离线或者准时接入的数据
    2. 数据仓库层:DW(Data Warehouse)
      数据仓库层是我们在做数据仓库时要核心设计的一层,在这里,从 ODS 层中获得的数据按照主题建立各种数据模型。

      1. 数据明细层:DWD(Data Warehouse Detail)
        • 功能:
          1. 提供业务系统细节数据的长期沉淀
          2. 为未来分析类需求的扩展提供历史数据支撑
        • 方式
          1. 保持和ODS层粒度一致;
          2. 指标事实与ODS基本保持一致。
          3. 剔除异常数据
          4. 拼接成宽表
      2. 数据中间层:DWM(Data WareHouse Middle)
        • 功能:
          1. 提供常用维度的初步汇总数据
          2. 提升公共指标的复用性
        • 方式
          1. 对通用的核心指标做聚合,得出相应的统计指标
      3. 数据服务层:DWS(Data WareHouse Servce)
        • 功能
          1. 集中维度,涵盖较多的业务内容
        • 方式
          1. 在DWM的基础上再做二次聚合,保留更少的维度,计算更多的指标
          2. 提供更多时间维度的数据
    3. 数据应用层:APP(Application)

      • 功能
        1. 对接数据分析需求,提供快速查询、支持
      • 方式
        1. 面向业务、面向分析
        2. 保持数据量小,快速查询、分析
    4. 维表层:DIM(Dimension)

      • 高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。
      • 低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万。
规范

数据建设过程中,从表规范、编码规范来减低模型后续开发、维护成本。

  • 表规范

    1. 表命名规范如下:
      (1) 表命名格式:[层次]_[主题]_[表内容]_[统计表规则]_[分区表规则];
      (2) 临时表命名格式:[tmp]_[表内容]_[操作者]_[YYYYMMDD];
    2. 表命名解释如下:
      (1) 层次:all_(ODS),dwd_(DWD),dwm_(DWM),dws_(DWS), [APP]_(例如apex_), dim_(DIM);
      (2) 表内容: 表名、视图名总长度不超过64字符;尽量详尽说明表具体内容。
      (3) 分区表规则:*_dt
      (4) 统计表规则:日汇总ds,月汇总ms,日累计da,月累计ma。
    3. 字段规范:
      (1) 命名规范
      a) 必须使用小写字母,并采用下划线分割;
      b) 字段名禁止超过 32 个字符;
      c) 字段名必须见名知意。命名与业务、产品线等相关联;
      d) 字段名禁止使用 Maxcompute 保留字、Oracle 保留字。
  • 编码规范

    1. 程序代码:每层一个代码目录,用于存放对应层的模型开发工程。
    2. Maxcompute 代码:
      (1) 使用 left join 代替 in/not in;
      (2) join 时小表尽量放在左边
      (3) 尽量使用静态分区,提升运行效率;例行补数建议使用动态分区简化代码;
      (4) 慎用笛卡尔积 join,卡历史数据建议使用日期维度表作笛卡尔积,以并行循环操作;
      (5) 尽量使用窗口函数、udf 简化 sql 逻辑,提升代码可读性;
      (6) join/group by/distinct 注意处理 NULL 值,尽量避免数据倾斜;
      (7) union 会去重, 不用去重时使用 union all;
      (8) 表查询如果是分区表, 加上分区限制。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值