数仓架构流程二

第二章 数仓分层与规范定义


文章目录

  • 第二章 数仓分层与规范定义
  • 数仓分层与规范定义
    • 一、数仓分层
    • 二、设计规范
      • 1 公共规范
        • 1.1 数据划分及命名空间约定
        • 1.2 公共字段定义规范
      • 2 设计规范
        • ods层
        • dim层
        • dwd层
        • dws层


数仓分层与规范定义

一、数仓分层

现在数仓的技术选型主要有两种:
一种是自建的CDH集群,基于hive来搭建离线数仓,基于flink的搭建实时部分。
一种是基于阿里云的dataworks这种一站式大数据开发与治理平台。
个人感觉dataworks比较好
数仓架构流程二_第1张图片
数仓架构流程二_第2张图片


二、设计规范

1 公共规范

1.1 数据划分及命名空间约定

请根据业务划分数据并约定命名,建议针对业务名称结合数据层次约定相关命名的英文缩写,这样可以给后续数据开发过程中,对项目空间、表、字段等命名做为重要参照。

  • 按业务划分:命名时按主要的业务划分,以指导物理模型的划分原则、命名原则及使用的ODS
    project。例如,按业务定义英文缩写,阿里的“淘宝”英文缩写可以定义为“tb”。
  • 按数据域划分:命名时按照CDM层的数据进行数据域划分,以便有效地对数据进行管理,以及指导数据表的命名。例如,“交易”数据的英文缩写可定义为“trd”。
  • 按业务过程划分:当一个数据域由多个业务过程组成时,命名时可以按业务流程划分。业务过程是从数据分析角度看客观存在的或者抽象的业务行为动作。例如,交易数据域中的“退款”这个业务过程的英文缩写可约定命名为“rfd_ent”。

1.2 公共字段定义规范

  • 数据统计日期的分区字段按以下标准:
    • 按天分区:ds(YYYYMMDD)。
    • 按小时分区:hh(00~23)。
    • 按分钟:mi(00~59)。
  • is_{业务}:表示布尔型数据字段。以Y和N表示,不允许出现空值域。
  • 原则上不需要冗余分区字段。
  • 含业务含义字段默认值:
    涉及金额字段默认值:0.00
    涉及数量字段默认值:0
    涉及数字型字段默认值:-9
    字符类字段默认值: -
    date型默认值:1970-01-01
    timestamp型默认值:1970-01-01 00:00:00.000
mysql数据类型 hive数据类型 MaxCompute数据类型
整型 bigint BIGINT BIGINT
整型 int BIGINT BIGINT
整型 smallint BIGINT BIGINT
整型 tinyint BIGINT BIGINT
浮点型 decimal decimal decimal
浮点型 double DOUBLE DOUBLE
浮点型 float DOUBLE FLOAT
二进制 binary BINARY STRING
二进制 varbinary BINARY STRING
字符 char STRING STRING
字符 varchar STRING STRING
字符 mediumtext STRING STRING
字符 text STRING STRING
时间 datetime STRING datetime
时间 time STRING STRING
时间 timestamp STRING STRING
时间 date date date

2 设计规范

ods层

ODS(Operational Data Store)层存放您从业务系统获取的最原始的数据,是其他上层数据的源数据。业务数据系统中的数据通常为非常细节的数据,经过长时间累积,且访问频率很高,是面向应用的数据

  • 表命名规范
    表命名规则:{层次}下划线{源系统表名}下划线{保留位/delta与否}。

    • 增量数据:ods_{源系统表名}_delta。
    • 全量数据:ods_{源系统表名}。
    • ODS ETL过程的临时表:tmp_{临时表所在过程的输出表}_{从0开始的序号}。
    • 按小时同步的增量表:ods_{源系统表名}__{delta}_{hh}。
    • 按小时同步的全量表:ods_{源系统表名}_{hh}。

    当不同源系统同步到同一个Project下的表命名冲突时,您需要给同步较晚的表名加上源系统的dbname以解决冲突。

  • 字段命名规范

    • 字段默认使用源系统的字段名。
    • 字段名与关键字冲突时,在源字段名后加上col,即源字段名col。

dim层

公共维度汇总层(DIM)主要由维度表(维表)构成。维度是逻辑概念,是衡量和观察业务的角度。维表是根据维度及其属性将数据平台上构建的物理化的表,采用宽表设计的原则。因此,公共维度汇总层(DIM)首先需要定义维度。
设计维表的主要步骤如下:

  1. 初步定义维度。
    保证维度的一致性。
  2. 确定主维表(中心事实表,本教程中采用星型模型)。
    此处的主维表通常是数据引入层(ODS)表,直接与业务系统同步。例如,s_auction是与前台商品中心系统同步的商品表,此表即是主维表。
  3. 确定相关维表。
    数据仓库是业务源系统的数据整合,不同业务系统或者同一业务系统中的表之间存在关联性。根据对业务的梳理,确定哪些表和主维表存在关联关系,并选择其中的某些表用于生成维度属性。以商品维度为例,根据对业务逻辑的梳理,可以得到商品与类目、卖家和店铺等维度存在关联关系。
  4. 确定维度属性。
    主要包括两个阶段。第一个阶段是从主维表中选择维度属性或生成新的维度属性;第二个阶段是从相关维表中选择维度属性或生成新的维度属性。以商品维度为例,从主维表(s_auction)、类目、卖家和店铺等相关维表中选择维度属性或生成新的维度属性。维度属性的设计需要注意:
    • 尽可能生成丰富的维度属性。
    • 尽可能多地给出富有意义的文字性描述。
    • 区分数值型属性和事实。
    • 尽量沉淀出通用的维度属性。

公共维度汇总层(DIM)维表命名规范: dim_{业务板块名称/pub}{维度定义}[{自定义命名标签}],pub是与具体业务板块无关或各个业务板块都可公用的维度。例如,时间维度;

dwd层

明细粒度事实层DWD(Data Warehouse Detail)以业务过程驱动建模,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。您可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。

通常您需要遵照的命名规范为:dwd_{业务板块/pub}{数据域缩写}{业务过程缩写}[_{自定义表命名标签缩写}] _{单分区增量全量标识},pub表示数据包括多个业务板块的数据。单分区增量全量标识通常为:i表示增量,f表示全量。例如: dwd_asale_trd_ordcrt_trip_di(A电商公司航旅机票订单下单事实表,日刷新增量)及dwd_asale_itm_item_df(A电商商品快照事实表,日刷新全量)。

dws层

公共汇总粒度事实层DWS(Data Warehouse Summary)以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求构建公共粒度的汇总指标事实表。公共汇总层的一个表至少会对应一个派生指标。
公共汇总事实表命名规范:dws_{业务板块缩写/pub}{数据域缩写}{数据粒度缩写}[{自定义表命名标签缩写}]{统计时间周期范围缩写}
关于统计实际周期范围缩写,缺省情况下,离线计算应该包括最近一天(_1d),最近N天(_nd)和历史截至当天(_td)三个表。如果出现_nd的表字段过多需要拆分时,只允许以一个统计周期单元作为原子拆分。即一个统计周期拆分一个表,例如最近7天(_1w)拆分一个表。不允许拆分出来的一个表存储多个统计周期。

你可能感兴趣的:(数据仓库)