数据仓库分为三层,自下而上为: 数据引入层(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.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.1 业务数据 业务数据往往产生于事务型过程处理,所以一般存储在关系型数据库中,如mysql、oracle 业务数据源: 用户基本信息、商品分类信息、商品信息、店铺信息、订单数据、订单支付信息、活动信息、物流信息等 3.2 埋点日志 埋点日志相对业务数据是用于数据分析、挖掘需求,一般以日志形式存储于日志文件中,随后通过采集落地 分布式存储介质中如hdfs、hbase 用户行为日志: 用户浏览、用户点评、用户关注、用户搜索、用户投诉、用户咨询 3.3 外部数据 当前一般公司都会通过线上广告来进行获客,与三方公司合作更多的提取相关数据来进行深度刻画用户及用 户群体,另外爬取公共公开数据也是分析运营的常用方式。 外部数据源: 广告投放数据、爬虫数据、三方接口数据
4.1 ODS贴源层
1.ODS层存放您从业务系统获取的最原始的数据,是其他上层数据的源数据。 2.ODS层数据主要包括:用户基本信息、商品分类信息、商品信息、店铺信息、 订单数据、订单支付信息、活动信息、行为日志信息
MySQL业务数据对应Hive表 中文含义MYSQL表名HIVE表名用户基本信息表nshop.customerods_nshop.ods_nshop_02_customer用户关注表nshop.customer_attentionods_nshop.ods_nshop_02_customer_attention收货地址管理表nshop.customer_consigneeods_nshop.ods_nshop_02_customer_consignee订单表nshop.ordersods_nshop.ods_nshop_02_orders订单详情表nshop.order_detailods_nshop.ods_nshop_02_order_detail订单支付记录表nshop.orders_pay_recordsods_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.categorydim_nshop.dim_pub_category店铺表nshop.supplierdim_nshop.dim_pub_supplier商品表nshop.productdim_nshop.dim_pub_product页面布局表nshop.page_dimdim_nshop.dim_pub_page通用字典表nshop.comm_dimdim_nshop.dim_pub_comm时间字典表nshop.date_dimdim_nshop.dim_pub_date地区字典表nshop.area_dimdim_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/'数仓运行简图:
数仓具体运行流程图: