More Related Content Similar to How to build data warehouse Similar to How to build data warehouse (20) How to build data warehouse1. How to Build Data Warehouse
• 如何构建数据仓库
傅桔选 JasonFu | Master Candidate
Supervised by Professor Jian Chen
School of Software Engineering, South China University of Technology
2. Outline
1. 为什么要建数据仓库
2. 数据仓库是什么
3. 开发过程
4. 开发实例
5. Q&A
Jason Fu(SCUT) 1/90 2012-11-19
3. Outline
1. 为什么要建数据仓库
2. 数据仓库是什么
3. 开发过程
4. 开发实例
5. Q&A
Jason Fu(SCUT) 2/90 2012-11-19
5. 1. 为什么要建数据仓库
充分利用已有的历史业务数据,进行集中的分析和知识提取,
从中获取决策支持。
决策高层希望直接进行数据分析,而无需专业数据分析人员的
协助,这就要求系统提供丰富、灵活和易用的分析功能。
决策支持处理需要相对稳定的数据,而已有的事务型数据库总
是在动态变化。
已有的事务型数据库系统专注于各种业务处理,且数据分散,
无法为集中的数据分析提供良好的支持。
Jason Fu(SCUT) 4/90 2012-11-19
6. Outline
1. 为什么要建数据仓库
2. 数据仓库是什么
3. 开发过程
4. 开发实例
5. Q&A
Jason Fu(SCUT) 5/90 2012-11-19
7. 2. 数据仓库是什么
数据仓库本身并不“生产”任
何数据,同时自身也不需
要“消费”任何的数据,数据
来源于外部,并且开放给
外部应用。
Jason Fu(SCUT) 6/90 2012-11-19
8. 2. 数据仓库是什么
DEFINITION
数据仓库(Data Warehouse)是一个面向主
题的(Subject Oriented)、集成的
(Integrated)、相对稳定的(Non-Volatile)、
反映历史变化(Time Variant)的数据集合,
用于支持管理决策(Decision Making Support)。
William H. Inmon
"The Father of Data Warehousing"
Jason Fu(SCUT) 7/90 2012-11-19
9. 2. 数据仓库是什么:特点
面向主题
集成的
相对稳定的
反映历史变化
Jason Fu(SCUT) 8/90 2012-11-19
10. 2. 数据仓库是什么:特点
面向主题
操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分
离,而数据仓库中的数据是按照一定的主题域进行组织的
主题是与传统数据库的面向应用相对应的,是一个抽象概念,是在较高层
次上将企业信息系统中的数据综合、归类并进行分析利用的抽象
每一个主题对应一个宏观的分析领域
e.g. :商品,销售,客户关系,…
Jason Fu(SCUT) 9/90 2012-11-19
11. 2. 数据仓库是什么:特点
面向主题
集成的
相对稳定的
反映历史变化
Jason Fu(SCUT) 10/90 2012-11-19
12. 2. 数据仓库是什么:特点
集成的
对原有分散的数据库数据进行抽取、清理
系统加工、汇总和整理
消除源数据中的不一致性
确保数据仓库内的信息是关于整个企业的一致的全局信息
Jason Fu(SCUT) 11/90 2012-11-19
13. 2. 数据仓库是什么:特点
面向主题
集成的
相对稳定的
反映历史变化
Jason Fu(SCUT) 12/90 2012-11-19
14. 2. 数据仓库是什么:特点
相对稳定的
供企业决策分析之用,所涉及的数据操作主要是数据查询
数据一旦进入数据仓库,一般情况下将被长期保留
大量的查询操作,修改和删除操作很少
定期的加载、刷新
Jason Fu(SCUT) 13/90 2012-11-19
15. 2. 数据仓库是什么:特点
面向主题
集成的
相对稳定的
反映历史变化
Jason Fu(SCUT) 14/90 2012-11-19
16. 2. 数据仓库是什么:特点
反映历史变化
包含历史信息,系统记录了企业从过去某一时间点(如开始应用数据
仓库的时点)到目前的各个阶段的信息
对企业的发展历程和未来趋势做出定量分析和预测
Jason Fu(SCUT) 15/90 2012-11-19
17. 2. 数据仓库是什么
DW VS. DB
特性 DW DB
定位 数据分析 事务处理
DB设计 星型模型,面向主题 E-R模型,面向应用
数据 历史、具有时间跨度 当前、最新的
汇总 汇总、一致的 原始、细节的
视图 总体、多维的 详细、关系的
存取 读(稳定) 读/写(易变)
存放记录 记录集合 少量记录
DB规模 TB GB
工作单位 复杂查询 短的、简单事务
设计方法 数据驱动 需求驱动
Jason Fu(SCUT) 16/90 2012-11-19
18. Outline
1. 为什么要建数据仓库
2. 数据仓库是什么
3. 开发过程
4. 开发实例
5. Q&A
Jason Fu(SCUT) 17/90 2012-11-19
19. 3. 开发过程
数据仓库是一个环境,而不是一件产品。
数据仓库系统是一个信息提供平台,他从业务处理系统获得数据,主要以
星型模型和雪花模型进行数据组织,并为用户提供各种手段从数据中获取
信息和知识。
从功能结构划分,数据仓库系统至少应该包含数据获取(Data
Acquisition)、数据存储(Data Storage)、数据访问(Data Access)三
个关键部分。
Jason Fu(SCUT) 18/90 2012-11-19
20. 3. 开发过程
数据仓库的基本架构
Jason Fu(SCUT) 19/90 2012-11-19
21. 3. 开发过程
开发策略
自顶向下:实际应用比较困难。
自底向上:用于一个数据集市或一个部门的数据仓库开发 ,容易获得成
功。
两种策略的联合使用:能够快速地完成数据仓库的开发与应用,而且还可以
建立具有长远价值的数据仓库方案。
Jason Fu(SCUT) 20/90 2012-11-19
22. 3. 开发过程
开发策略:自顶向下
Jason Fu(SCUT) 21/90 2012-11-19
23. 3. 开发过程
开发策略:自底向上
Jason Fu(SCUT) 22/90 2012-11-19
24. 3. 开发过程
构建过程
构造/实施
需求/设计 使用/维护
新的需求
Jason Fu(SCUT) 23/90 2012-11-19
25. 3. 开发过程
设计原则
以数据驱动为中心,数据驱动和需求驱动相结
合。
数据驱动:根据当前数据基础和质量等情况,进
行数据源分析。
需求驱动:根据业务方向性需求、业务问题等,
确定系统范围和需求框架。
Jason Fu(SCUT) 24/90 2012-11-19
26. 3. 开发过程
数据仓库设计的三级数据模型
概念模型 逻辑模型 物理模型
• “信息世界”中的信 • 一般采用关系模型 • 物理存储结构、存
息结构 储方法
• 用E-R方法,以主
题替代实体
Jason Fu(SCUT) 25/90 2012-11-19
27. 3. 开发过程
数据仓库设计的三级数据模型
Jason Fu(SCUT) 26/90 2012-11-19
28. 3. 开发过程
开发基本流程
概念模型设计
技术准备工作
逻辑模型设计
物理模型设计
数据仓库生成
数据仓库运行与维护
Jason Fu(SCUT) 27/90 2012-11-19
29. 3. 开发过程
概念模型设 技术准备工 逻辑模型设 物理模型设 数据仓库生 数据仓库运
计 作 计 计 成 行与维护
概念模型设计的结果是在原有数据库的基础上建立了一个较为稳固的概念模型。
数据仓库的概念模型设计,首先要对原有数据库系统加以分析理解。
① 界定系统边界
要做的决策类型有哪些?
决策者感兴趣的是什么问题?
这些问题需要什么样的信息?
要得到这些信息需要包含原有数据库系统的哪些部分的数据?
② 确定主要的主题域及其内容
主题域的公共码;
主题域之间的联系;
充分代表主题的属性组。
Jason Fu(SCUT) 28/90 2012-11-19
30. 3. 开发过程
概念模型设 技术准备工 逻辑模型设 物理模型设 数据仓库生 数据仓库运
计 作 计 计 成 行与维护
工作:技术评估和技术环境准备。
成果:技术评估报告、软硬件配置方案、系统(软、硬件)总体设计方
案。
Jason Fu(SCUT) 29/90 2012-11-19
42. 3. 开发过程
概念模型设 技术准备工 逻辑模型设 物理模型设 数据仓库生 数据仓库运
计 作 计 计 成 行与维护
分析主题域,确定当前要加载的主题
确定粒度层次划分
确定数据分割策略
关系模式定义
记录系统的定义
Jason Fu(SCUT) 41/90 2012-11-19
43. 3. 开发过程
概念模型设 技术准备工 逻辑模型设 物理模型设 数据仓库生 数据仓库运
计 作 计 计 成 行与维护
存储结构
确定索引策略
确定数据存放位置
确定存储分配
Jason Fu(SCUT) 42/90 2012-11-19
44. 3. 开发过程
概念模型设 技术准备工 逻辑模型设 物理模型设 数据仓库生 数据仓库运
计 作 计 计 成 行与维护
接口编程
从面向应用和操作的环境生成完整的数据;
数据类型的转换;
数据的清洗;
数据的集成;
数据的增量更新。
数据装入
确定数据装入的次序;
清除无效或错误数据;
清除“老化”数据,即清除过期数据;
数据粒度管理;
数据刷新等。
Jason Fu(SCUT) 43/90 2012-11-19
45. 3. 开发过程
概念模型设 技术准备工 逻辑模型设 物理模型设 数据仓库生 数据仓库运
计 作 计 计 成 行与维护
建立数据分析应用
理解需求,改善和完善系统
维护数据仓库
Jason Fu(SCUT) 44/90 2012-11-19
46. Outline
1. 为什么要建数据仓库
2. 数据仓库是什么
3. 开发过程
4. 开发实例
5. Q&A
Jason Fu(SCUT) 45/90 2012-11-19
47. 4. 开发实例
建筑节能数据仓库和数据分析系统
Jason Fu(SCUT) 46/90 2012-11-19
48. 建筑节能数据仓库和数据分析系统
需 求: 在现有的各种建筑节能监管系统的基础上,利用其产生的业务
数据,构建一个数据仓库,并基于该数据仓库构建联机分析处
理,提供多维分析、报表等功能,为节能决策提供支持。
数据来源: 某高校节约型校园建筑节能监管平台
Jason Fu(SCUT) 47/90 2012-11-19
49. 建筑节能数据仓库和数据分析系统
概念模型设
计
界定系统边界、确定主要的主题域及其内容。
Building_Day_Energydata_Collection
Building_Month_Energydata_Collection
Building_Year_Energydata_Collection
Standard_Type
Building_General_Info
Energy_UnitPrice
………
能耗主题域
用户需求
Jason Fu(SCUT) 48/90 2012-11-19
50. 建筑节能数据仓库和数据分析系统
概念模型设
计
时间
能耗
建筑 能源
主题
地区
Jason Fu(SCUT) 49/90 2012-11-19
51. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工
计 作
实验项目
学习目的
资金
数据集的大小
实际的使用需求
……
Jason Fu(SCUT) 50/90 2012-11-19
52. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工 逻辑模型设
计 作 计
定义关系模式。
数据仓库的模型设计采用了雪花模型。
事实表只有一个,为能耗事实表,时间维、能耗维、建筑维和区域维是基本维,而建筑类型
维和能源类型维是间接维。
Jason Fu(SCUT) 51/90 2012-11-19
53. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工 逻辑模型设
计 作 计
各维度的粒度层次划分。
年 能
时 源 能源类型 能 能源类型
季度
间 类 源
维 月 型 能源的子项类 维
度 维 度 具体能源
日 度 型
国家 建 建筑大类型
区 筑 建 建筑用途类型
省份 建筑分项类型
域 类 筑
维 市 型 建筑所属单位 维
度 维 度 具体建筑
区/县 度 建筑用途分类
Jason Fu(SCUT) 52/90 2012-11-19
54. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工 逻辑模型设
计 作 计
度量值设计 度量指标
能耗量
度量值是所分析的多维数据集的中心值,
能耗占比率
它是最终用户浏览多维数据集时重点查看 分项能耗占比率
的数据,它是衡量业务成绩的指标。 同期比较(差)
年度总能耗
有效数据月数量
能耗月均值
有效数据日数量
能耗日均值
最大日能耗
最小日能耗
Jason Fu(SCUT) 53/90 2012-11-19
55. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工 逻辑模型设 物理模型设
计 作 计 计
存储结构
MySQL有两种表存储结构,MyISAM和InnoDB。在使用MySQL构建数据仓库时,
我们选用的是MyISAM,因为MyISAM的读取的效率更高。
索引策略
对各个维度表以及事实表的主键加索引,并对事实表对于各维表的外键添加索
引。
Jason Fu(SCUT) 54/90 2012-11-19
56. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工 逻辑模型设 物理模型设
计 作 计 计
物理模型关系图
Jason Fu(SCUT) 55/90 2012-11-19
57. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工 逻辑模型设 物理模型设
计 作 计 计
维度 维度表
维表主键
主题 事实表
度量值
Jason Fu(SCUT) 56/90 2012-11-19
58. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工 逻辑模型设 物理模型设
计 作 计 计
维度表的设计
时间维表(TIME_DIM) 能源类型维表(ENERGY_TYPE_DIM) 建筑维表(BUILDING_DIM)
名称 类型 说明 名称 类型 说明 名称 类型 说明
time_id Number 维表主键 energy_type_id Number 维表主键 building_id Number 维表主键
energy_type_name Varchar 能源类型名称 building_type_id Number 建筑类型维表外键
date DateTime 日期
energy_type_subitem Varchar 能耗类型子项 building_name Varchar 建筑名称
day Char 月的第几日
building_all_area Number 建筑总面积
month Char 年的第几月
building_storey_num Number 建筑层数
quarter Char 年的第几季度 human_capacity Number 人口容量
year Number 年 function Varchar 使用功能
区域维表(REGION_DIM) 能源维表(ENERGY_DIM) 建筑类型维表(BUILDING_TYPE_DIM)
名称 类型 说明 名称 类型 说明 名称 类型 说明
region_id Number 维表主键 energy_id Number 维表主键 building_type_id Number 维表主键
country Varchar 国家 energy_type_id Number 能源类型维表外键 building_type_name Varchar 建筑类型名称
province Varchar 省 energy_name Varchar 能源名称 building_type_subitem Varchar 建筑类型子项
city Varchar 城市 energy_unit Varchar 能耗单位 department Varchar 具体单位部门
county Varchar 县区 energy_price Double 能源单价 department_subitem_type Varchar 建筑用途类型
Jason Fu(SCUT) 57/90 2012-11-19
59. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工 逻辑模型设 物理模型设
计 作 计 计
事实表的设计
能耗事实表(ENERGY_FACT)
名称 类型 说明
energy_fact_id Number 事实表主键
time_id Number 时间维表外键
energy_id Number 能源维表外键
region_id Number 地区维表外键
building_id Number 建筑维表外键
energy_cons Double 能耗量
energy_cost Double 能耗额
unit_area_energy_cons Double 单位面积能耗量
unit_area_energy_cost Double 单位面积能耗额
per_capita_energy_cons Double 人均能耗量
per_capita_energy_cost Double 人均能耗额
Jason Fu(SCUT) 58/90 2012-11-19
60. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工 逻辑模型设 物理模型设 数据仓库生
计 作 计 计 成
数据ETL
SQL
ETL 数据仓库
缺失值
噪声数据
不一致
结构不符合分析的要求
……
Jason Fu(SCUT) 59/90 2012-11-19
61. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工 逻辑模型设 物理模型设 数据仓库生
计 作 计 计 成
使用Kettle ETL进行数据的ETL
构建建筑能耗数据转换的工作示例
Jason Fu(SCUT) 60/90 2012-11-19
62. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工 逻辑模型设 物理模型设 数据仓库生
计 作 计 计 成
数据库可视化操作工具+SQL脚本
SQL脚本
Jason Fu(SCUT) 61/90 2012-11-19
63. 建筑节能数据仓库和数据分析系统
概念模型设 技术准备工 逻辑模型设 物理模型设 数据仓库生 数据仓库运
计 作 计 计 成 行与维护
使用Mondrian构建一个基于
Web的数据仓库系统
Jason Fu(SCUT) 62/90 2012-11-19
64. 使用Mondrian构建一个基于Web的数据仓库系统
Mondrian是一个开源项目。一个用Java写成的OLAP引擎。它用MDX
语言实现查询,从关系数据库(RDBMS)中读取数据。然后经过Java
API以多维的方式对结果进行展示。
Mondrian的使用方式同JDBC驱动类似。可以非常方便的与现有的Web
项目集成。
JPivot 是Mondrian的表现层TagLib,一直保持着良好的开发进度。
Mondrian 为客户端提供一个用于查询的API。
Jason Fu(SCUT) 63/90 2012-11-19
66. 使用Mondrian构建一个基于Web的数据仓库系统
开发环境:
操作系统:Windows 7
Web服务器:Tomcat 6.0
关系数据库:MySQL 5.1
开发工具:MyEclipse 8.5
Jason Fu(SCUT) 65/90 2012-11-19
67. 使用Mondrian构建一个基于Web的数据仓库系统
到Mondrian官网下载Mondrian压缩包,最新稳定版为mondrian-3.3.0.14703。
使用MyEclipse创建一个Java Web项目EnergyWarehouse。
解压Mondrian压缩包,在lib目录下找到mondrian.war,将其拓展名改为zip,直接
解压到mondrian文件夹,构建Mondrian Web项目所需的文件都在里面。
Jason Fu(SCUT) 66/90 2012-11-19
68. 使用Mondrian构建一个基于Web的数据仓库系统
进入mondrian文件夹,选中jpivot、wcf二个文件夹及busy.jsp、error.jsp、testpage.jsp
三个文件,将这些资源复制到Java Web项目的WebRoot目录下。
注:jpivot、wcf这两个文件夹包含mondrian使用的图像和css文件。Busy.jsp显示等待页面、
error.jsp显示出错页面、testpage.jsp这文件的用处将在后面介绍。
Jason Fu(SCUT) 67/90 2012-11-19
69. 使用Mondrian构建一个基于Web的数据仓库系统
进入mondrian文件夹的WEB-INF文件夹,选中jpivot、lib、wcf这三个文件夹,将它们
复制到Java Web项目的WEB-INF文件夹中。
注:Jpivot、wcf这两个文件夹包含jpivot和wcf用于生成用户界面的配置文件(*.xml、*.xsl)及标签文
件(*.tld)的定义。Lib文件夹包含的是mondrian所要用的java包。
Jason Fu(SCUT) 68/90 2012-11-19
71. 使用Mondrian构建一个基于Web的数据仓库系统
建立mondrian模式(schema)文件
一个mondriann模式文件定义了一个多维数据库它包含一个逻辑模型(logical
model)、一组数据立方(consisting of cubes)、层次(hierarchies)、和成员
(members), 并映射到相应的物理模型上。
配置一个模式就是配置一个关系数据结构到多维数据结构的映射。
逻辑模型(logical model)是为了编写MDX查询语言而创建的,有如下概念:
数据立方(cubes);
维(dimensions);
层次(hierarchies);
级别(levels);
成员(members).
Jason Fu(SCUT) 70/90 2012-11-19
72. 使用Mondrian构建一个基于Web的数据仓库系统
建立mondrian模式(schema)文件
在Java Web项目的WEB-INF下新建一个queries
的文件夹,然后在该文件夹下创建一个名为
energydb.xml的文件。
Jason Fu(SCUT) 71/90 2012-11-19
75. 使用Mondrian构建一个基于Web的数据仓库系统
MDX(多维表达式)
在模式文件定义完成之后,我们就可以根据它来编写相应MDX查询语句了。
MDX是一种语言,它可以表达在线分析处理(OLAP)数据库上的选择、计
算和一些元数据定义等操作,并赋予用户自定义表现查询结果的能力。
MDX 在很多方面与结构化查询语言 (SQL) 语法相似。
Jason Fu(SCUT) 74/90 2012-11-19
76. 使用Mondrian构建一个基于Web的数据仓库系统
MDX(多维表达式)
基本的 MDX SELECT 语句包含一个 SELECT 子句和一个 FROM 子句,以及一个
可选的 WHERE 子句。
SELECT 子句决定 MDX SELECT 语句的轴维度。本 MDX 查询示例中定义了两个
轴维度。
FROM 子句决定当析取数据以填充 MDX SELECT 语句的结果集时将使用哪个多
维数据源。
SELECT [<axis_specification> [, <axis_specification>...]]
FROM [<cube_specification>]
[WHERE [<slicer_specification>]]
Jason Fu(SCUT) 75/90 2012-11-19
77. 使用Mondrian构建一个基于Web的数据仓库系统
创建MDX查询
Mondrian创建MDX 查询,是通过创建一个jsp文件,该jsp使用jpivot的
mondrianQuery标签来完成查询的。
Jsp文件位于Java Web项目的/WEB-INF/queries文件夹下。
该文件最后将被testpage.jsp使用。
Jason Fu(SCUT) 76/90 2012-11-19
78. 使用Mondrian构建一个基于Web的数据仓库系统
一个MDX查询文件 导入jpivot 标签
指定查询所使用的模式文件
用于执行MDX查询
的jpivot标签 查询所使用的JDBC驱动
用于连接到数
需要被执行
据的url,包含
的MDX语
数据库的用户
句
名及密码等
Jason Fu(SCUT) 77/90 2012-11-19
79. 使用Mondrian构建一个基于Web的数据仓库系统
模式(Schema)文
最终Java Web项目效果 件和MDX查询文件均
位于此
编写完所需的其他的MDX查询文件。
至此,完成项目的配置。
Jason Fu(SCUT) 78/90 2012-11-19
80. 使用Mondrian构建一个基于Web的数据仓库系统
部署项目
部署到Tomcat服务器。
直接在MyEclipse中运行。
访问
http://localhost:8080/ EnergyWarehouse/
Jason Fu(SCUT) 79/90 2012-11-19
82. 建筑节能数据仓库和数据分析系统
WITH MEMBER [Measures].[能耗占比率]
AS
'iif(
([Measures].[能耗量],[时间].CurrentMember.Parent) > 0,
[Measures].[能耗量]
/
([Measures].[能耗量], [时间].CurrentMember.Parent),
NULL
)',
FORMAT_STRING='Percent'
select {[Measures].[能耗量],
[Measures].[能耗占比率]
} ON columns,
NON EMPTY {([地区].[所有地区],
[建筑].[所有建筑],
[能源].[所有能源],
[时间].[所有时间])
} ON rows
from [Energys]
Jason Fu(SCUT) 81/90 2012-11-19
83. 建筑节能数据仓库和数据分析系统
select
{[Measures].[能耗量]}
ON columns,
TopCount(
{
Descendants(
[建筑].[所有建筑],
4,
LEAVES
)
},
10,
[Measures].[能耗量]
)
ON rows
from [PerCapita]
Jason Fu(SCUT) 82/90 2012-11-19
86. 其他数据仓库系统
中国电信上行短信数据仓库和数据分析系统
省交通厅数据仓库系统
Jason Fu(SCUT) 85/90 2012-11-19
88. 省交通厅数据仓库系统
系统演示
Jason Fu(SCUT) 87/90 2012-11-19
89. Outline
1. 为什么要建数据仓库
2. 数据仓库是什么
3. 开发过程
4. 开发实例
5. Q&A
Jason Fu(SCUT) 88/90 2012-11-19