电商数仓架构介绍

1.数仓分层概述

数据仓库分为三层,自下而上为:
数据引入层(ODS,Operation Data Store)
数据公共层(CDM,Common Data Model)
数据应用层(ADS,Application Data Service)

  • 数据引入层(ODS,Operation Data Store):将原始数据几乎无处理的存放在数据仓库系统,结构上与源系统基本保持一致,是数据仓库的数据准备区。
  • 数据公共层(CDM,Common Data Model,又称通用数据模型层),包含DIM维度表、DWD和 DWS,由ODS层数据加工而成。主要完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。这一层里又包括三层:
    1.公共维度层(DIM):全拼dimension
    ,基于维度建模理念思想,建立整个企业的一致性维度。降低数据计算口径和算法不统一风险。公共维度层的表通常也被称为逻辑维度表,维度和维度逻辑表通常一一对应。
    2.数仓明细层(DWD):全拼data warehouse detail
    大体作用:ods经过清洗,落地这一层,一般是最细粒度。
    具体:以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,也即宽表化处理。明细粒度事实层的表通常也被称为逻辑事实表。
    3.数据汇总层(DWS):全拼data warehouse service
    大体作用:对dwd的轻微聚合,对一些可累加的指标进行聚合,增加复用性
    具体:以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。公共汇总粒度事实层的表通常也被称为汇总逻辑表,用于存放派生指标数据。
  • 数据应用层(ADS,Application Data Service):存放数据产品个性化的统计指标数据。根据CDM与ODS层加工生成
2.数仓开发规范

2.1 数据库命名
命名规则:数仓对应分层_{业务线|业务项目}
命名示例:ods_nshop/dwd_nshop/dws_nshop/dim_nshop/ads_nshop/
2.2 数仓各层对应数据库
ods/sda层 -> sda/ods_{业务线|业务项目}(原始数据)
dw层 -> dwd_{业务线|业务项目} (主题) + dws_{业务线|业务项目}(基于主题宽表汇总)
dim层 -> dim_维度 (维表库)
ads层 -> ads_{业务线|业务项目} (应用统计指标等)
middle层 -> mid_{业务线|业务项目}(中间库) 临时数据 -> temp_{业务线|业务项目}(临时库)
2.3 数据库表命名规则

  • 原始数据层
    命名规则:
    ods_{业务线|业务项目}_{数据来源类型}_{业务}
    ods_{业务线|业务项目}_{数据来源类型}_{业务}_{时间粒度}_delta
    delta代表增量,主要用于数据同步方向产生的原始数据表
    命名示例:
    ods_nshop_01_useractlog XX用户日志原始数据表
    ods_nshop_02_user XX用户表(全量)
    ods_nshop_02_user_delta XX用户表(增量)
    ods_nshop_02_user_hh_delta XX用户表(小时级增量 dd天)
  • 主题/事实数据层
    命名规则:
    dwd_{业务线|业务项目}_{主题域}_{子业务}
    命名示例:
    dwd_nshop_user_logproview XX用户产品浏览日志事实表
    dwd_nshop_user_comment XX用户关注事实表
  • 主题/事实汇总层
    命名规则:
    dws_{业务线|业务项目}_{主题域}_{汇总相关粒度}_{汇总时间周期}
    命名示例:
    dws_nshop_user_order_nd XX用户订单汇总N天统计表
    dws_nshop_user_cmtpro_nd XX用户产品关注汇总N天统计表
  • 维表层
    命名规则:
    dim_{业务线|业务项目|pub公共}_{维度}
    命名示例:
    dim_pub_date 时间维表
    dim_pub_area 地区维表
    dim_pub_category 商品分类
  • 集市层
    命名规则:ads_{业务线|业务项目}_{统计业务}_{报表form|热门排序topN}
    命名示例:
    ads_nshop_order_form 订单统计表 ads_nshop_orderpay_form 订单支付统计
  • 数据来源说明
    01 -> hdfs数据 ods_nshop.ods_01_action_log 行为日志表
    02 -> mysql数据 ods_nshop.ods_02_user 用户表
    03 -> redis数据
    04 -> mongodb数据
    05 -> tidb数据
3.数据来源介绍

3.1 业务数据
业务数据往往产生于事务型过程处理,所以一般存储在关系型数据库中,如mysql、oracle
业务数据源: 用户基本信息、商品分类信息、商品信息、店铺信息、订单数据、订单支付信息、活动信息、物流信息等
3.2 埋点日志
埋点日志相对业务数据是用于数据分析、挖掘需求,一般以日志形式存储于日志文件中,随后通过采集落地 分布式存储介质中如hdfs、hbase
用户行为日志: 用户浏览、用户点评、用户关注、用户搜索、用户投诉、用户咨询
3.3 外部数据
当前一般公司都会通过线上广告来进行获客,与三方公司合作更多的提取相关数据来进行深度刻画用户及用 户群体,另外爬取公共公开数据也是分析运营的常用方式。
外部数据源: 广告投放数据、爬虫数据、三方接口数据

4.数仓建设

4.1 ODS贴源层

1.ODS层存放您从业务系统获取的最原始的数据,是其他上层数据的源数据。
2.ODS层数据主要包括:用户基本信息、商品分类信息、商品信息、店铺信息、 订单数据、订单支付信息、活动信息、行为日志信息

  • MySQL业务数据对应Hive表
中文含义 MYSQL表名 HIVE表名
用户基本信息表 nshop.customer ods_nshop.ods_nshop_02_customer
用户关注表 nshop.customer_attention ods_nshop.ods_nshop_02_customer_attention
收货地址管理表 nshop.customer_consignee ods_nshop.ods_nshop_02_customer_consignee
订单表 nshop.orders ods_nshop.ods_nshop_02_orders
订单详情表 nshop.order_detail ods_nshop.ods_nshop_02_order_detail
订单支付记录表 nshop.orders_pay_records ods_nshop.ods_nshop_02_orders_pay_records
  • 埋点日志对应Hive表
中文含义 HIVE表名
用户行为日志表 ods_nshop.ods_nshop_01_useractlog

电商平台在网页版或APP版终端上进行业务埋点,采集相关用户行为数据发送给服务器进行用户行为分析。

  • 外部数据对应Hive表
中文含义 HIVE表名
广告投放信息表 ods_nshop.ods_nshop_01_releasedatas

外部数据来源主要有:
1 企业间的接口调用(如其他企业平台上的广告投放营销)
2 公共数据的爬虫数据(公共数据、友商数据、社区|社交平台公开数据)

4.2 DW主题层

  • 主题划分
    在不同的业务中,数仓建设都会涉及到几种类型的数据:通用行为数据、业务强相关的数据、通用行为衍生出的行为数据以及其它不易划分的数据:
    1 通用行为数据主题: 即各业务场景都容易出现行为,比如用户行为日志中的曝光、点击和下载等。
    2 业务行为数据主题: 主要是指和业务强相关的行为,比如说电商下单业务,视频业务中有播放行为。
    3 衍生行为数据主题: 主要是指非用户原始的行为,比如说留存,本身是由用户活跃来描述的。
    4 其它行为数据主题: 有一些多主题交叉的数据,比如跨业务和行为的阅读带来的购买行为数据主题
    电商项目中所涉及的主题包括:
    【用户主题】-> 衍生行为数据主题(更多的)
    【交易主题】-> 业务行为数据主题
    【营销活动主题】-> 业务行为数据主题
    【事件(行为日志)主题】-> 通用行为数据主题

  • 主题概述
    描述:DW层分为DWD和DWS层,是数据仓库维度建模的核心,需紧绕业 务过程来设计。
    示例: 用户产品浏览主题

CREATE external TABLE
IF NOT EXISTS dwd_nshop.dwd_nshop_actlog_product_view (
    user_id string COMMENT '用户id',
    os string COMMENT '手机系统',
    os_version string COMMENT '手机系统版本',
    manufacturer string COMMENT '手机制造商',
    carrier string COMMENT '电信运营商',
    network_type string COMMENT '网络类型',
    area_code string COMMENT '地区编码',
    target_id string COMMENT '产品ID',
    ct BIGINT COMMENT '产生时间'
)

1 数据依赖: ODS层的用户行为日志(ods_nshop.ods_nshop_01_useractlog)
2 哪些维度(包括关联其他主题维度)、度量?
维度:
1 以用户相关的维度【user_id、os、os_version、manufacturer等等】
2 关联相关主题维度【target_id】
3 度量值 聚合操作(sum,count等等)

  • DWD明细层
    1.DWD概述
    明细粒度事实层以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理. 明细粒度事实层(DWD)通常分为三种:事务事实表、周期快照事实表和累积快照事实表。
    2 DWD中的信息有什么?
    事实表中一条记录所表达的业务细节程度被称为粒度。通常粒度可以通过两种方式来表述:一种是维度属性 组合所表示的细节程度,一种是所表示的具体业务含义。
    作为度量业务过程的事实,通常为整型或浮点型的十进制数值,有可加性、半可加性和不可加性三种类型:
    (1) 可加性事实是指可以按照与事实表关联的任意维度进行汇总。
    示例:交易订单记录表中的【用户ID】可以进行count|distinct count汇总
    (2) 半可加性事实只能按照特定维度汇总,不能对所有维度汇总。
    示例:库存可以按照地点和商品进行汇总,而按时 间维度把一年中每个月的库存累加则毫无意义。 交易订单记录表中的【时间维度、地区维度】按照这类“自然属性”的维度进行统计,在主题层没有实际意 义,而偏统计报表类计算更多在DM层进行汇总,或者在DWS层往往是以某个主题数据做核心,与其产生关系 的其他主题数据作为度量值来进行统计汇总的。
    (3) 完全不可加性。
    示例:转化率、比率型等事实。

  • 事务事实表
    事务事实表用来描述业务过程,跟踪空间或时间上某点的度量事件,保存的是最原子的数据,也称为原子事 实表。
    示例:交易订单记录表、广告投放数据表,这类数据本身是一个业务过程。

  • 周期快照事实表
    周期快照事实表中的每行汇总了发生在某一标准周期, 如一天、 一周或一月的多个度量。 其粒度是周期 性的时间段, 而不是单个事务。周期快照事实表通常包含许多数据的总计, 因为任何与事实表时间范围一 致的记录都会被包含在内。
    示例:
    一个月|一周的销售订单周期快照, 用于按产品统计每个月总的销售订单金额和产品销售数量

  • 累积快照事实表
    累积快照事实表用来表述过程开始和结束之间的关键步骤事件,覆盖过程的整个生命周期,通常具有多个日 期字段来记录关键时间点。当累积快照事实表随着生命周期不断变化时,记录也会随着过程的变化而被修 改。
    具体实现方式:拉链表

  • DWS汇总层
    DWS是基于DWD数据,以其中的主题信息为维度,以其他主题数据为统计度量的数据集合表
    示例:
    主题为【交易主题】下的订单记录
    粒度1:【order_id, order_status,payment_money, order_ctime】是订单业务相关的维度信息
    粒度2:【customer_id】用户主题相关,另外与支付主题相关
    用户主题的用户启动日志表【DWD】建表示例:

CREATE external TABLE
IF NOT EXISTS dwd_nshop.dwd_nshop_actlog_launch (
    user_id string COMMENT '用户id',
    device_num string COMMENT '设备号',
    device_type string COMMENT '设备类型',
    os string COMMENT '手机系统',
    os_version string COMMENT '手机系统版本',
    manufacturer string COMMENT '手机制造商',
    carrier string COMMENT '电信运营商',
    network_type string COMMENT '网络类型',
    area_code string COMMENT '地区编码',
    launch_time_segment string COMMENT '启动时间段',
    ct BIGINT COMMENT '产生时间'
) partitioned BY (bdp_day string) stored AS parquet location '/data/nshop/dw/user/dwd_nshop_actlog_launch/'

交易主题域的交易订单明细流水表【DWD】示例:

CREATE external TABLE
IF NOT EXISTS dwd_nshop.dwd_nshop_orders_details (
    order_id string COMMENT '订单ID',
    order_status INT COMMENT '订单状态:5已收货(完成)|6投诉 7退货',
    supplier_code VARCHAR (20) NOT NULL COMMENT '店铺ID',
    product_code VARCHAR (20) NOT NULL COMMENT '商品ID',
    device_type string COMMENT '设备类型',
    os string COMMENT '手机系统',
    os_version string COMMENT '手机系统版本',
    manufacturer string COMMENT '手机制造商',
    carrier string COMMENT '电信运营商',
    user_areacode string COMMENT '用户所在地区',
    consignee_zipcode string COMMENT '收货人地址',
    pay_type string COMMENT '支付类型:线上支付 10 网上银行 11 微信 12 支付宝 | 线下支 付(货到付款) 20 ',
    pay_count INT COMMENT '支付次数',
    product_price DECIMAL (5, 1) NOT NULL COMMENT '购买商品单价',
    weighing_cost DECIMAL (2, 1) NOT NULL COMMENT '商品加权价格',
    district_money DECIMAL (4, 1) NOT NULL DEFAULT 0.0 COMMENT '优惠金额',
    is_activity NOT NULL DEFAULT 0 COMMENT '1:参加活动|0:没有参加活动',
    order_ctime BIGINT COMMENT '创建时间'
) partitioned BY (bdp_day string) stored AS parquet location '/data/nshop/dwd/order/dwd_nshop_orders_details/'

营销活动主题的广告投放数据表【DWD】示例:

CREATE external TABLE
IF NOT EXISTS dwd_nshop.dwd_nshop_releasedatas (
    customer_id string COMMENT '用户id',
    device_num string COMMENT '设备号',
    device_type string COMMENT '设备类型',
    os string COMMENT '手机系统',
    os_version string COMMENT '手机系统版本',
    manufacturer string COMMENT '手机制造商',
    area_code string COMMENT '地区编码',
    release_sid string COMMENT '投放请求id',
    release_ip string COMMENT '投放方ip',
    release_session string COMMENT '投放会话id',
    release_sources string COMMENT '投放渠道',
    release_category string COMMENT '投放浏览产品分类',
    release_product string COMMENT '投放浏览产品',
    release_product_page string COMMENT '投放浏览产品页',
    ct BIGINT COMMENT '创建时间'
) partitioned BY (bdp_day string) stored AS parquet location '/data/nshop/dwd/release/dwd_nshop_releasedatas/'
  • DIM维表层
    MySQL业务数据对应的Hive表
中文含义 MYSQL表名 HIVE表名
商品分类表 nshop.category dim_nshop.dim_pub_category
店铺表 nshop.supplier dim_nshop.dim_pub_supplier
商品表 nshop.product dim_nshop.dim_pub_product
页面布局表 nshop.page_dim dim_nshop.dim_pub_page
通用字典表 nshop.comm_dim dim_nshop.dim_pub_comm
时间字典表 nshop.date_dim dim_nshop.dim_pub_date
地区字典表 nshop.area_dim dim_nshop.dim_pub_area
  • MID中间层
    用户启动统计【MID】建表示例:
CREATE external TABLE
IF NOT EXISTS mid_nshop.mid_nshop_actlog_launch_timesegs (
    user_id string COMMENT '用户id',
    os string COMMENT '手机系统',
    os_version string COMMENT '手机系统版本',
    manufacturer string COMMENT '手机制造商',
    carrier string COMMENT '电信运营商',
    network_type string COMMENT '网络类型',
    area_code string COMMENT '地区编码',
    launch_times string COMMENT '24bit表示24小时启动情况',
    launch_count INT COMMENT '用户每天启动次数',
    ct BIGINT COMMENT '产生时间'
) partitioned BY (bdp_day string) stored AS parquet location '/data/nshop/mid/actlog/mid_nshop_actlog_launch_timesegs/'
  • ADS应用数据层
    总体运营统计的流量类指标_平台统计表【ADS】建表示例:
CREATE external TABLE
IF NOT EXISTS ads_nshop.ads_nshop_platform_flow_stat (
    customer_gender TINYINT NOT NULL COMMENT '性别:1男 0女',
    age_range VARCHAR (10) NOT NULL COMMENT '年龄段',
    customer_natives VARCHAR (10) NULL COMMENT '所在地区',
    visit_avg_duration INT COMMENT '人均页面访问时长',
    visit_avg_counts INT COMMENT '人均页面访问数'
) partitioned BY (bdp_day string) stored AS parquet location '/data/nshop/ads/operation/ads_nshop_platform_flow_stat/'
5.数仓结构图

数仓运行简图:


数仓具体运行流程图:


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343