当前位置: 首页 > 后端技术 > Java

2数据仓库层次结构+维度建模

时间:2023-04-01 22:57:07 Java

@TOC数据仓库笔记数据仓库与数据集市详解:ODS、DW、DWD、DWM、DWS、ADS上硅谷数据仓库1项目需求与架构设计硅谷数据仓库实战2数据仓库层次结构+维度建模硅谷数据仓库实战3数据仓库构建硅谷数据仓库4.0视频教程B站直达:2021新版电商数据仓库V4.0丨大数据数据仓库项目实战百度网盘:https://pan.baidu.com/s/1FGUb...,提取码:yyds阿里云盘:https://www.aliyundrive.com/s...,提取码:335o第一章数据仓库分层1.1为什么分层1.2数据集市和数据仓库概念1.3数据仓库命名约定1.3.1表命名?ODS层命名为ods_表名?DIM层命名为dim_表名?DWD层命名为dwd_表名?DWS层命名为dws_tablename?DWT层命名为dwt_tablename?ADS层命名为ads_tablename?临时表命名为tmp_tablename1.3.2Scriptname?Datasource_to_target_db/log.sh?用户行为脚本以log为后缀;业务数据脚本以db为后缀。1.3.3表字段类型?Quantity类型为bigint?Amount类型为decimal(16,2),表示:16位有效数字,其中2位小数?String(名称、描述信息等)类型为string?Primarykey外键类型为string?timestamp类型为bigint第2章数据仓库理论2.1范式理论2.1.1范式概念1)定义数据建模必须遵循一定的规则,在关系建模中,这样的规则就是范式。2)目的采用范式,可以减少数据的冗余。为什么要减少数据冗余?(1)十多年前,磁盘很贵,为了减少磁盘存储。(2)以前没有分布式系统,都是单机的,只能加磁盘,磁盘数量也有限制(3)一次修改需要修改多张表,难度大以保证数据的一致性。3)范式的缺点是可以获取到数据,最终的数据需要通过Join拼接在一起。4)分类目前业界的范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BassCodd范式(BCNF)、第四范式(4NF)、第五范式(5NF)).2.1.2功能依赖2.1.3三种范式区别2.2关系建模和维度建模关系建模和维度建模是数据仓库的两种建模技术。关系建模由BillInmon开创,维度建模由RalphKimball开创。2.2.1关系建模关系建模将复杂的数据抽象为实体和关系两个概念,并以标准化的方式表达。关系模型如图所示。从图中可以看出相对松散和碎片化,物理表数量较多。关系模型严格遵循第三范式(3NF),数据冗余度低,数据一致性容易保证。由于数据分布在很多表中,查询会比较复杂,在大数据场景下,查询效率比较低。2.2.2维度建模维度模型如图所示,从图中可以看出模型比较清晰简洁。图DimensionalModelSchematicDiagram维度模型以数据分析为出发点,不遵循三种范式,因此数据存在一定的冗余。维度模型是面向业务的,用事实表和维度表来呈现业务。表结构简单,查询简单,查询效率高。2.3维表和事实表(重点)2.3.1维表维表:一般描述关于事实的信息。每个维表对应现实世界中的一个对象或概念。例如:用户、产品、日期、地区等维表特点:?维表的范围很广(多属性、列多)?与事实表相比,行数相对较少:usually<100,000items?内容比较固定:编码表时间维度表:dateIDdayofweekdayofyearquarterholiday2020-01-01211NewYear'sDay2020-01-02321None2020-01-03431None2020-01-04541无2020-01-05651无2.3.2事实表事实表数据中的每一行代表一个业务事件(下单、付款、退款、评论等)。术语“事实”指的是对一个商业事件的衡量值(可计数的次数、次数、金额等),例如2020年5月21日,宋先生在2020年5月21日以250元的价格购买了一瓶海狗参。京东药丸。维度表:时间、用户、产品、商户。事实表:250元,每行一瓶事实表包括:加法数值测量值,与维表相连的外键,通常有两个或多个外键。事实表的特点:?非常大?内容相对狭窄:列较少(主要是外键id和度量值)?变化频繁,每天都会增加很多新的。1)事务性事实表以每笔交易或事件为单位,如销售订单记录、付款记录等,作为事实表中的一行数据。一旦事务提交,事实表数据插入,数据将不再改变,更新方式为增量更新。2)周期性快照事实表周期性快照事实表不保留所有数据,只保留固定时间间隔的数据,如每日或每月的销售额,或每月的账户余额。比如购物车,有商品的加减,随时可能变化,但是我们更关心的是每天结束时有多少商品,方便我们后期的统计分析。3)累积快照事实表累积快照事实表用于跟踪业务事实的变化。例如,数据仓库可能需要积累或存储订单从下单到打包、发货、签收的各个业务阶段的时间点数据,以跟踪订单的状态。订单申报周期的进度。当这个业务流程在进行的时候,事实表中的记录也在不断更新。Orderid,userid,ordertime,packagingtime,deliverytime,receipttime,orderamount,3-83-83-93-102.4维度模型分类在维度建模的基础上,分为三种模型:明星模型,雪花模型,星座模型。2.5数据仓库建模(绝对重点)2.5.1ODS层1)HDFS用户行为数据2)HDFS业务数据3)我们如何在HDFS上规划和处理用户行为数据和业务数据?(1)保持数据原貌,不做任何修改,起到备份数据的作用。(2)对数据进行压缩,减少磁盘存储空间(例如:原始数据为100G,可以压缩到10G左右)(3)创建分区表,防止后续全表扫描2.5.2DIM层和DWDlayerDIM层DWD层需要构建维度模型,一般采用星型模型,呈现的状态一般为星座模型。维度建模一般遵循以下四个步骤:选择业务流程→声明粒度→确认维度→确认事实(1)选择业务流程在业务系统中,选择我们感兴趣的业务线,如订单业务、支付业务、退款支付业务、物流业务,一条业务线对应一张事实表。(2)语句粒度数据粒度是指数据仓库中存储的数据的精细程度或全面程度。声明粒度意味着精确定义事实表中的一行数据代表什么。尽量选择最小的粒度,以满足各种需求。一个典型的粒度表述如下:订单事实表中的一行数据代表一个订单中的一个商品项目。支付事实表中的一行数据代表一条支付记录。(3)确定维度维度的主要作用是描述业务事实,主要表达“谁、何地、何时”等信息。确定维度的原则是:后续需求中是否分析相关维度的指标。比如需要统计什么时候下单最多,哪个地区下单最多,哪个用户下单最多。需要确定的维度包括:时间维度、地域维度、用户维度。(4)判定事实这里的“事实”一词是指业务中的计量值(次数、件数、件数、金额、可累加),如订单金额、订单数量等。DWD层,以业务流程为建模驱动,根据各个具体业务流程的特点,构建明细层最细粒度的事实表。事实表可以适当加宽。事实表和维表的关联相对灵活,但是为了满足更复杂的业务需求,可以关联的表尽量关联。业务总线矩阵:时间用户区域商品优惠券活动计量订单√√√运费/折扣金额/原价/最终金额订单详情√√√√√√件数/折扣金额/原价/最终金额支付√√√支付金额追加购买数量√√√收藏张数/数量√√√评价次数√√√退款次数√√√√购买数量/退款金额√√√√领券张数/数量√√√时代至此,数据仓库维度建模已经完成,DWD层由业务流程驱动。DWS层、DWT层、ADS层都是需求驱动的,与维度建模无关。DWS和DWT都是建宽表和按主题建表。主题相当于观察问题的角度。对应维度表。2.5.3DWS层和DWT层DWS层和DWT层统称为宽面层。两层的设计思路大致相同,通过以下案例进行说明。1)问题得出:两个需求,统计每个省的订单数,统计每个省的订单总量2)解法:join省表和订单表,按省分组,然后计算。同样的数据计算两次,其实类似的场景会更多。那么如何设计才能避免重复计算呢?针对上述场景,可以设计一张全区域的表,主键为区域ID,字段包括:下单次数、下单金额、支付次数、支付金额等。以上指标统一计算,结果保存在宽表中,可以有效避免数据的重复计算。3)总结:(1)需要建哪些宽表:基于维度。(2)宽表中的字段:从不同维度的角度看事实表,关注事实表的聚合度量值。(3)DWS层和DWT层的区别:DWS层存储了当天所有主体对象的汇总行为,如当天各地区下单数量、订单金额等,以及DWT层存储了所有主题对象的累积行为,例如最近7天(15天、30天、60天)每个区域的下单数量和下单金额。2.5.4ADS层