桥路丶
这个作者很懒,什么都没留下…
展开
-
【开篇】专栏介绍&学习指南
写在前面的话你好,我是李鹏程,高级数据工程师、大数据讲师。这次给大家带来的是《数据仓库原理&实战》专栏。数据仓库基本在各个企业都均有落地,主要是因为历史数据积存、数据分析的需要。而且随着互联网的快速发展、数据量与日俱增的情况下,更多的企业开始从传统数据仓库向大数据数据仓库转型。传统数据仓库技术较成熟,易用性更为优秀;大数据数据仓库整体技术较新,而且落地过程是有一定过渡的,在选型和建模...原创 2020-09-22 11:49:01 · 749 阅读 · 0 评论 -
【简介】数据仓库诞生背景
数据仓库的诞生主要有两个原因:历史数据的积存需要企业数据分析的需要历史数据积存对于企业来说,线上的业务系统,随着业务的进行,会源源不断的产生数据。这些数据都会存储在业务数据库中,如 MySQL、Oracle 当中,支持业务系统的运行。但当线上的业务系统运行超过一定时间,其积压的历史数据就会越来越多,对业务数据库就会产生一定的负载,导致业务系统运行速度降低。而这些历史数据中,有相当一...原创 2020-09-22 11:48:59 · 1677 阅读 · 0 评论 -
【简介】数据仓库概述
什么是数据仓库?数据仓库是由数据仓库之父比尔·恩门(Bill Inmon)提出,数据仓库是一个面向主题的、集成的、非易失的且随时间变化的数据集合。主要用于组织积累的历史数据,并使用分析方法(OLAP、数据分析)进行分析整理,进而辅助决策,为管理者、企业系统提供数据支持,构建商业智能。数据仓库的特点面向主题数据仓库是为数据分析服务的,而数据分析任务是有明确的主题任务的。比如,要分析用户行...原创 2020-09-22 11:48:58 · 334 阅读 · 0 评论 -
【简介】数据仓库技术实现
数据仓库建设方案有两种,一种是传统架构的数据仓库,一种是大数据架构的数据仓库。传统数据仓库传统数据仓库是由单机数据库发展而来的。业务数据库一般是关系型数据库(RDBMS),那数据仓库在建设初期,也会选用关系型数据库,因为数据迁移起来方便,而且业务系统的改造成本也较小。但历史数据较为庞大,单个 RDBMS 节点即使增加了大容量硬盘,也无法满足存储需求怎么办?那就多个 RDBMS 节点组成 MP...原创 2020-09-22 11:48:56 · 2037 阅读 · 0 评论 -
【简介】MPP&分布式架构
MPP 架构什么是 MPP?MPP 架构是传统数据仓库中常见的技术架构,将单机数据库节点组成集群,从而提升处理性能。集群中,这些节点间使用非共享架构,每个节点拥有独立的磁盘存储和内存系统,在计算过程中独立运行,而不必去关心整个集群的状态,也不关心其他节点存储的数据信息。每台数据节点通过专用网络或者商业通用网络互相连接,在计算过程中,如果需要用到其他节点的数据,使用网络进行数据传输、协同计...原创 2020-09-22 11:48:55 · 8862 阅读 · 0 评论 -
【简介】常见数据仓库产品
传统数据仓库在企业中,传统数据仓库的技术选型,较多的还是 Oracle RAC、DB2、Teradata。选择 Greenplum 的企业也有很多。Oracle RACOracle RAC(Real Application Clusters)是 Oracle 集群版本;商业数据库;它不属于 MPP 架构。MPP 架构是非共享架构,而 Oracle 各节点之间共享磁盘资源。Oracle 在...原创 2020-09-22 11:48:54 · 3800 阅读 · 0 评论 -
【架构】数据仓库架构设计
数仓主流架构数据仓库在不同企业,它的架构也会有所差异。但分层和基本功能上大同小异,可能命名上有所不同,或者根据企业的业务特点做了一定的定制。现在国内主流的架构还是以阿里为参考,整体架构如图所示:从图中色块的不同,也能大体看到架构整体上分为四部分:ETL、ODS、CDM、ADS。按照数据流动的方向,从下而上依次进行讲解。ETLETL 是数据同步模块,表示将数据从来源端经过抽取(extr...原创 2020-09-22 11:48:52 · 603 阅读 · 0 评论 -
【架构】ETL 流程
ETL 基本概念ETL 是将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至目的端的过程。ETL 过程是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去。ETL 规则的设计和实施约占整个数据仓库搭建工作量的 60%~80%。数据抽取(Extraction)对不同数据源的...原创 2020-09-22 11:48:51 · 800 阅读 · 0 评论 -
【架构】数据积存功能之 ODS 层
操作数据层 ODS在数据仓库的整体架构中讲到,ODS 层的数据需与原业务数据保持一致,且不允许修改,从而完成历史数据积存的功能。数据管理但在实际企业开发中,ODS 层的数据是原始数据的一个扩充集,在保留所有原始数据的情况下,会增加一些字段用来进行数据管理。如下图所示,为表增加 update_time 字段标识数据进入数据仓库的时间,from 字段标识数据的源系统,update_type 字...原创 2020-09-22 11:48:50 · 945 阅读 · 0 评论 -
【架构】数据分析功能之 DWD、DWS、ADS 层
数据明细层(DWD)数据明细层对 ODS 层的数据除了进行清洗、标准化之外,还会进行维度退化。维度是指对表中数据的一种组织方式,如时间、分类、地域;这些维度属性,在业务数据库中,会被拆分成多张表进行存储,这些表被称为维度表。如下图所示,商品表和它的分类维度表(一、二、三级分类),按照范式标准一共拆分成了 4 张表。但在数据仓库产品中,一旦涉及到 join 关联操作,会消耗大量的资源,且降...原创 2020-09-22 11:48:48 · 8512 阅读 · 0 评论 -
【建模】不同系统的建模方法
OLTP 系统建模方法OLTP 系统,即在线事务处理系统;企业的业务数据库就是属于 OLTP 范畴,它主要的操作是随机读写。为了保证数据的一致性、减少冗余,经常使用关系模型。在关系模型中,使用三范式来减少冗余。OLAP 系统建模方法OLAP 系统概述OLAP 系统,即在线联机分析系统,数据仓库就属于这一类。它主要操作是分析查询;关注数据整合,以及分析、处理性能。但是三范式的设计,在分...原创 2020-09-22 11:48:47 · 529 阅读 · 0 评论 -
【建模】ROLAP 维度模型
在数据仓库的 ROLAP 模型中,维度模型是被使用最多、最经典的一种模型。能够提高数据仓库的分析计算性能。在维度模型中,表被分为维度表、事实表,维度表围绕事实表进行解释。其中事实表是一张表的基本数据,而维度表则是对数据的一种组织方式,常用于不同维度对数据进行组织。如图所示,商品表为事实表,而分类表则是维度表。在实际生活中,按照维度去对数据进行筛查是非常常见的一种手段。如在购物网站购买手机时...原创 2020-09-22 11:48:46 · 668 阅读 · 0 评论 -
【建模】MOLAP 建模方法
建模原理MOLAP 是一种用空间换时间的方式。既然 OLAP 的特点是满足快速的复杂分析查询,而它对性能的影响主要体现在多种维度的组合、聚合上。所以,与其查询的时候进行计算,不如直接将结果预先计算出来,然后进行存储,这样便可以对之后的查询性能带来极大的提升。但这样也损失了灵活性,并需要大量的空间用于存储。那这种预计算结果以什么形式存储呢?Cube 模型。Cube 模型Cube 模型是以多维...原创 2020-09-22 11:48:44 · 1546 阅读 · 0 评论 -
【建模】多维分析
OLAP 多维分析OLAP 主要操作是复杂查询,可以多表关联,使用 COUNT、SUM、AVG 等聚合函数。对于这些复杂查询操作,OLAP 做了直观的定义和分类,将其称为多维分析;其中包括钻取、切片、切块、旋转。钻取钻取是对维度不同层次的分析,通过改变维度的层次来变换分析的粒度,包括上卷(Roll-up)、下钻(Drill-down)。上卷(Roll-up),也称为向上钻取,指从低层次到...原创 2020-09-22 11:48:42 · 2809 阅读 · 0 评论 -
【最佳实践】数仓中的表类型
维度建模中表的类型在维度建模中,表类型分为事实表、维度表,而事实表又可以细分为事务事实表、周期快照事实表、累积快照事实表。事实表事实表存储的数据一般是指一个现实存在的业务对象,比如用户,商品,商家,销售员等等,属于查询结果中的核心数据。维度表维度表一般是指对应一些业务状态,代码的解释表。也可以称之为码表。在查询过程中,对数据起到筛选、组织作用。通常使用维度对事实表中的数据进行统计、聚合...原创 2020-09-22 11:48:41 · 780 阅读 · 0 评论 -
【最佳实践】ETL 同步策略
全量同步数据初始化装载的时候,一定使用的是全量同步的方式。全量同步数据时,如果数据量过大,会导致 ETL 流程非常慢,甚至周期会长达几个月。对于结构化数据,常用工具采用的是 JDBC 的方式直接连接到数据库进行抽取,所以会对数据库端带来极大的负载和压力,降低数据库端的稳定性。当然 JDBC 方案如果可行,那它是最简单的方式。如果存在风险,或者周期过长,可以采用抽取数据库日志的方式,这种架构需要...原创 2020-09-22 11:48:39 · 945 阅读 · 0 评论 -
【最佳实践】任务调度
为什么需要任务调度?任务调度在一个大型计算集群中是非常必要的。首先它可以完成任务的定时执行,而且在集群中需要指定特定的节点来完成。以数据仓库为例,数据抽取任务需要在业务数据库节点进行,并且为了不影响业务的正常运行,通常在凌晨定时执行;而数据分析计算,需要在数据仓库节点运行。其次它可以解决任务单元间的依赖关系,如数据仓库中的数据处理流程首先是 ETL,然后依次在数据仓库中进行 ODS、DWD、...原创 2020-09-22 11:48:38 · 364 阅读 · 0 评论 -
【项目实战】项目&数据概述
项目背景某电商企业,因数据积存、分析需要,筹划搭建数据仓库;并能能够提供数据分析的访问接口,以供分析人员进行数据分析任务。本次需要实现的是项目一期,需要完成数仓搭建,并完成用户复购率的分析计算,支持业务查询需求。复购率计算复购率是指在一段时间间隔内,多次重复购买产品的用户,占全部人数的比率。企业需要统计各个一级品类下,品牌月单次复购率,和多次复购率。需要的数据示例如下图所示:数据描述...原创 2020-09-22 11:48:37 · 248 阅读 · 0 评论 -
【项目实战】架构设计&环境规划
数据仓库架构图根据企业的需求,业务数据存储在 MySQL 中,选择 Sqoop 作为 ETL 工具,HDFS 临时保存 Sqoop 抽取的数据。数据仓库部分选择主流的 Hive,并使用 Tez 进行优化;其中 ADS 层的数据会导出到 MySQL 中,便于前端业务进行快速调用。使用 Presto 作为快速查询的工具,Azkaban 作为调度工具。数据的生成会使用脚本来进行;整个 ETL 流程...原创 2020-09-22 11:48:35 · 184 阅读 · 0 评论 -
【项目实战】环境搭建
虚拟机准备安装说明 & 文件下载下载并安装 Virtual Box,准备并安装 3 台 CentOS 7.2 的虚拟机,主机名命名为 Node01、Node02、Node03。虚拟机的安装可以使用纯系统镜像,安装后配置主机名。但过程会比较繁琐,学习环境讲求开箱即用,尽量少地在环境上花费时间,否则会打击学习的热情。所以,也可以直接导入已经配置好的虚拟机镜像文件,方便使用。使用纯镜像安装,下附...原创 2020-09-22 11:48:34 · 526 阅读 · 0 评论 -
【项目实战】项目流程&数据生成
项目开发流程整体项目的开发流程是:业务数据生成,在 MySQL 数据库中生成当天的数据ETL 数据导入,通过 Sqoop 对 MySQL 当天日期的数据进行抽取,并存放到 HDFS 中在 Hive 中创建 ODS 层,编写脚本,完成 HDFS 数据接入在 Hive 中创建 DWD 层,编写脚本,完成 ODS 层数据导入在 Hive 中创建 DWS 层,编写脚本,导入 DWD 层数据...原创 2020-09-22 11:48:33 · 466 阅读 · 0 评论 -
【项目实战】ETL 数据导入
操作说明数据已经在 MySQL 中生成,接下来就开始进行数据仓库的搭建环节。首先最重要的,也是首要的流程便是 ETL。这个阶段,因为是对结构化数据进行抽取,所以直接使用 Sqoop 工具即可。Sqoop 工具被安装到了 Node03 中,所以在 Node03 中编写脚本调用 Sqoop 进行数据抽取;而脚本化的编写也有助于之后的自动化执行。操作流程1. 进入 Sqoop 安装节点,即 Nod...原创 2020-09-22 11:48:31 · 1205 阅读 · 0 评论 -
【项目实战】ODS 层创建&数据接入
操作说明此时已经将数据从 MySQL 中导入到 HDFS 中了,接下来就需要将数据导入到数据仓库的 ODS 层中,完成原始数据的存储。这个部分分为两个阶段,首先在 Hive 中创建 ODS 层的所有表结构,表结构与源系统(MySQL)一致。之后,使用脚本将 HDFS 中存储的数据导入到 Hive 数据仓库的 ODS 层中。ODS 层创建1. 进入 Hive 安装节点(Node03),启动 ...原创 2020-09-22 11:48:30 · 1936 阅读 · 0 评论 -
【项目实战】DWD 层创建&数据接入
DWD 层分析DWD 层的作用是对 ODS 层的数据进行清洗,但因为业务数据库的数据质量很高,所以只需要去除空数据即可。除了数据清洗外,DWD 层还需要对 ODS 层的数据进行维度退化。而所有的表中,分类表可以被退化,维度合并到商品表中。即为商品表增加 6 列,分别存放一二三级品类的名称和 ID,并删除三张分类表。DWD 层创建在 DWD 层,基本保留所有表,然后减少分类表,并入到商品表...原创 2020-09-22 11:48:28 · 1229 阅读 · 0 评论 -
【项目实战】DWS 层创建&数据接入
DWS 层分析DWS 层的功能是将具有相同分析主题的 DWD 层数据,聚合成宽表模型,便于数据分析与计算。当然主题的归纳一般具有通用性,后续也可能会随着分析业务的增加而扩展。现在从业务数据的 5 张表中,归纳出了用户行为宽表、用户购买商品明细表,其它的主题大家也可以自行发挥。从订单表、用户表、支付流水表中抽取字段,形成用户行为宽表。从订单详情表、商品表、用户表,抽取字段形成用户购买商品明...原创 2020-09-22 11:48:27 · 888 阅读 · 0 评论 -
【项目实战】ADS 层复购率统计
ADS 层分析ADS 层需要在 DWS 层的数据上计算复购率,并存储结果表。复购率可以从 DWS 层的用户购买商品明细表中进行计算。其中品牌 id、一级品类 id、一级品类名可以从用户购买商品明细表中直接获取,统计月份、统计日期也可以从当前时间获取。剩下的购买人数、购买 2 次及以上人数、单次复购率、购买 3 次及以上人数、多次复购率,需要从用户购买商品明细表中的当日下单数进行计算。购买...原创 2020-09-22 11:48:26 · 481 阅读 · 0 评论 -
【项目实战】ADS 层数据导出
为了业务系统进行更快速的查询,需要将 ADS 层的结果数据导出到 MySQL 中,这个过程因为涉及到数据流转,所以需要通过 ETL 工具 Sqoop 来进行。MySQL ADS 层创建1. 在 Node02,MySQL 节点的 /home/warehouse/sql 目录下编写 mysql_sale_ddl.sql,创建与 ADS 层结果表一致的数据表:mkdir -p /home/ware...原创 2020-09-22 11:48:24 · 1077 阅读 · 0 评论 -
【项目实战】Azkaban 自动化调度
现在整个数据仓库的流程已经打通,并且所有脚本也已经封装完成。但从业务数据库抽取数据,一般选择在夜间进行,而且数据仓库的整个处理流程是有先后关系的,所以需要使用自动化调度工具来进行定时、控制依赖关系。现使用 Azkaban 作为数据仓库的调度工具。接下模拟新一天的数据生成,并使用 Azkaban 完成整个数据处理过程的自动调度。测试数据生成在 Node02,即 MySQL 安装节点中执行 SQ...原创 2020-09-22 11:48:23 · 406 阅读 · 0 评论 -
【课后作业】GMV 成交总额计算
在项目实战后,大家应该对数据仓库的整体流程有了一个较为清晰的认识。除了复购率的计算,接下来在原有数仓已经搭建成功的基础上,尝试着来完成 GMV 的计算任务,巩固知识的同时也体会下真实的工作内容。下面讲解和分析具体的作业内容。作业内容计算 GMV(成交总额),需要计算的字段如图所示,包含付款和未付款部分;最终将结果导出到 MySQL。要求:独立编写为 Shell 脚本,使用 Azkaban ...原创 2020-09-22 11:48:21 · 1103 阅读 · 0 评论 -
【课后作业】ADS 层创建&数据接入
因为数据仓库已经创建完成,所以直接基于已有的 DWS 层进行计算。计算 GMV 的 ADS 层具体操作下面会具体进行讲解。ADS 层创建1. 在 Node03 节点,/home/warehouse/sql 目录下编写 ads_gmv_ddl.sql,创建 DWS 层数据表:vim /home/warehouse/sql/ads_gmv_ddl.sqlSQL 内容如下:-- 使用数据库 ...原创 2020-09-22 11:48:20 · 457 阅读 · 0 评论 -
【课后作业】ADS 层数据导出
ADS 层数据计算完成后,接下来使用 Sqoop 将数据导出到 MySQL 中。MySQL ADS 创建在 MySQL 节点(Node02)的 /home/warehouse/sql 目录下编写 mysql_gmv_ddl.sql,创建数据表:vim /home/warehouse/sql/mysql_gmv_ddl.sqlSQL 脚本如下:-- 进入数据库use mall;--...原创 2020-09-22 11:48:18 · 581 阅读 · 0 评论 -
【课后作业】Azkaban 自动化调度
最后,将完成的 Shell 脚本交由 Azkaban 进行自动化调度。具体步骤讲解如下。MySQL 数据生成在 Node02 节点的 MySQL 中执行 SQL,生成数据:mysql -uroot -pDBa2020*use mall;CALL init_data('2020-06-13',300,200,300,FALSE);Azkaban 任务编写编写 Azkaban 运行 j...原创 2020-09-22 11:48:17 · 331 阅读 · 0 评论