`
han_zw
  • 浏览: 174190 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

hello 数据仓库

 
阅读更多
作为笔记记录下,希望对别的朋友有帮助。
 
Hello DW
1. WHAT
    1.1 数据仓库定义
        数据仓库不是新事物,它的定义由数据仓库之父——Bill Inmon在1991年发表的著作《Building the Data Warehouse》中提出。本书影响非常大,属于数据仓库的经典著作。Bill Inmon也被人称之为“数据仓库之父”。
       他给出的数据仓库定义:数据仓库(Data Warehouse, 简称DW)是一个面向主题的、集成的、非易失的,随时间变化的用来支持管理人员决策的数据集合。
 
    1.2 四个特点:
    * 面向主题性——传统操作型数据的数据设计围绕功能进行组织,数据组织方式目的就是如何更好的支持该功能的业务操作。比如订票系统,数据库的组织结构围绕订票功能实现。而数据仓库的数据组织方式是面向主题的。数据按照主题域进行组织、设计。主题域是对公司业务的更高度的抽象和归纳,比如对主题域可以是:客户、消费、推广等,随公司的业务领域不同而不同。

    * 集成性——各个业务系统的数据统一汇聚到数据仓库中,得到一个单一的物理映像。数据仓库的数据源来自各个数据系统,各数据系统的数据源类型、存储位置各不相同,需要集成到统一的数据仓库,对外提供一致的数据物理映像,该过程就是数据仓库建设过程中的数据集成。另外,数据集成并不是简单的把数据转储到DW中,在集成过程中通常还需要对数据进行标准化数据口径的处理。以数据中的性别信息为例,不同业务系统中对性别数据可能采用了不同的值进行表示,例如0/1,f/m等,类似数据在集成过程中都要转换成数据仓库统一的数据口径。

    * 非易失——操作型数据库中的数据存储的是业务的当前值,值变更通常对应的是一次数据库的更新操作,不会对历史值进行保留,用户每次查询得到的也是当前值。如用户每次查询自己的银行卡余额都可以得到当前的实际值,但是如果要查询之前某一天的余额,普通的业务系统就不能完成了。因为没有保留历史数据,丢失了。而数据仓库在每次数据变化时并不会进行数据更新操作,而是产生一个新的静态数据快照追加到DW中,这样就保留了所有的历史数据。另外需要指出的一点就是,数据仓库的数据保留周期长,也保证了数据的非易失性。操作型数据系统的数据保留时间通常在30-90天,DW的数据保留周期通常在5-10年。

    * 随时间变化——DW中的数据通常要与时间信息绑定,DW中的数据只是在某一时间是准确的。比如查询账户余额,需要说明是哪一天的账户余额。时间维度几乎是任何数据仓库中都必须的重要维度。
 
2. WHY
    在说为什么需要数据仓库之前,先看下没有数据仓库的话,一个公司的数据业务是怎么样的。
 

 
上面这图是我从书上复制出来借用的。图中的框形表示部门,圆柱形表示数据存储。部门间的数据需求就会产生一次ETL。如果部门少的话,这种方式也没有什么问题,但是如果是一家大公司,会有大量部门 间的数据ETL,不可避免的还有级联的ETL。形成的结果就是上面这幅图——蜘蛛网。蜘蛛网式的数据建设带来的问题就是:
* 数据缺乏可信性:一个业务指标可能A部门统计出来的是增长10%,而B部门统计出来是减少5%。这里排除计算程序本身的问题,有可能是两个部门采用了不同的指标统计口径,或者采用了不同的数据源,又或者是因为数据采集的时间点不一致等等。部门间数据的层级数据ETL,也会影响数据质量。一个环节数据出现偏差,层层的级联ETL会逐级放大错误。总之结果就是,无法给出一个可信的数据指标。

* 生产效率问题:蜘蛛网式的建设,数据使用方要面对各种数据源类型,而且数据任务无法复用,无法找到统一的数据来源,导致生产效率低下。

* 无法将数据转化为信息:各个业务系统都维护自身的业务数据,但是均没有形成统一时间周期的历史数据,没办法通过对历史数据的挖掘和分析提取有价值的信息,支撑公司的决策需求。
 
于是我们需要一个数据仓库:

 
3. HOW
   3.1  数据仓库的层次结构
    在不同的行业领域对数据仓库的层次结构划分略有不同,但是思路是相近的。下面是一个相对通用层次,实际的数据仓库可能会在此基础上裁剪或者增补层次。


 
接下来简要的把各个层次的含义说一下。
    STAGE:业务数据与DW数据在数据集成阶段的缓冲层,各个业务系统的数据统一暂存到STAGE,后续DW的ETL过程只需要面对单一的物理介质,简化了数据集成的过程。STAGE层的数据存储周期都不长,一般在3-7天左右。STATE层还有一个好处就是方面DW中数据中问题数据的修复,可以重新从STAGE重新采集数据进行修复。STAGE可选。
    ODS:操作数据存储层。ODS数据结构还保持着业务系统中的结构,但是ODS存储的周期长,需要长期沉淀。ODS的数据已经划分到各自的主题域下,属于仓库的范围之内了。ODS是为下一阶段的数据处理做准备。
    DWD:明细数据层。企业的核心业务处理层,需要重点设计、建设,数据模型的价值在这层突出体现,通常采用关系模型3NF设计。这一层需要对数据进行统一口径,以及一些汇总,但是仍然有明细数据。如每个客户的多次消费记录。
    DWA: 轻度汇总层。该层是对明细数据的进一步汇总,该层不再有明细数据,均为汇总后的数据,客户的周消费汇总等。还有一些业务系统中没有,但是又很重要的衍生数据,如客户的首末次消费时间等。
    DM:数据集市。一般部门级的数据分析系统,主题域一般是数据仓库主题域的子集。DM是为部门级数据分析服务,可以更加定制化,模型也围绕自身业务。模型通常采用多维模型,目的就是更好的满足OLAP的需求。
    数据仓库在建设过程中有不同的方法论,上面的说法其实只是一家之言,在一些建设领域还有其他的声音。
 
    3.2 ODS的不同看法
        3.2.1 独立建设:再次把Bill Inmon搬出来,他的观点是ODS应该作为独立数据系统建设。因为DW存储的应该是汇总后的数据,操作型数据的存储的粒度和DW不一致,ODS数据是DW数据的准备阶段,大量明细数据的长期沉淀对DW来说成本高,而且也没有必要长期沉淀。因为他的观点是下面这样的。ODS存储周期保持在3-6个月。这种建设方式允许ODS的数据可更新,具备了一定的OLTP的特性。并且可以独立对外提供数据服务。ODS的数据服务响应的及时性要求高,通常在1秒以内,主要提供一些概要数据。比如常见的用户画像场景。


     3.2.2 ODS只是DW的前端边缘:再把BI之父 Ralph Kimball搬出来,他的观点是:ODS是DW的一部分,ODS也应该是面向主题的、集成的。随着技术的进步,Bill Inmon提出的困难都不存在了,新的大数据技术可以实现大量明细数据和汇总数据的共同存储,另外因为机器学习和数据挖掘技术的发展,DW中单纯汇总的数据已经满足不了需求,需要能够获取大量明细数据作为数据源。因为 Ralph Kimball把ODS纳入到DW中,如下图

 
3.3 数据仓库的建设过程有两个方法论:从底向上、从顶向下。
    又得提到前面的两位了,干脆配张照片吧。
    Bill Inmon 提出从底向上的方案(以下简称方案1)

 Ralph Kimball 提出从顶向下的方案(以下简称方案2)

 其实两种方案的主要分歧点在数据集市的看法,方案1认为数据集市是在数据仓库基础上衍生的,数据集市的所有数据均需要来自DW。而方案2则认为数据集市可以优先独立建设,数据直接对接业务系统,多个数据集市组成数据仓库。

从底向上方案

 

从顶向下方案

数据集市所有数据来自DW

 

数据直接来自操作层

指标体系强一致性

 

一致性保障难度大

实施周期长

 

实施周期短,见效快

长期看节省资源和工作

 

短期看节省资源和工作

 

通常情况下,短期效益压力较大时可以采用从顶向下的方案,但是一旦完成了短期业务目标之后,还是需要转到从底向上的方案中来。

 

最后,
see you, DW!
  • 大小: 28.1 KB
  • 大小: 22.7 KB
  • 大小: 110.8 KB
  • 大小: 75.6 KB
  • 大小: 201.3 KB
  • 大小: 77.7 KB
  • 大小: 39.2 KB
分享到:
评论

相关推荐

    hello-algo-数据结构与算法-zh-csharp.pdf

    "数据结构与算法学习指南" 本书《Hello 算法》是为了帮助读者学习数据结构与算法而编写的,作者靳宇栋...* GitHub 仓库:https://github.com/krahets/hello-algo * hello-algo 官方网站:https://hello-algo.com

    数据仓库技术及应用-基于window+Docker的环境配置方法

    ### 数据仓库技术及应用——基于Window+Docker的环境配置方法 #### 一、Docker Desktop简介及其在Win10环境下的安装与配置 **Docker Desktop** 是一款专为Windows设计的应用程序,旨在简化Docker环境的部署过程。...

    hello world 111

    在本文中,我们将深入探讨基于“hello world 111”的Java编程学习,以及一个复杂的花果连锁店POS系统的运作和系统结构。首先,我们从基础的“Hello World”程序开始,这是任何编程语言入门的第一步,对于Java也不...

    读书笔记:本仓库是算法学习的专题笔记内容来源于《数据结构与算法之美》、《Hello算法》和《算法第四版》.zip

    读书笔记:本仓库是算法学习的专题笔记内容来源于《数据结构与算法之美》、《Hello算法》和《算法第四版》

    Hello World半成品.pptx

    - 将历史数据和清单数据迁移到低成本的分布式数据库,减轻主数据仓库的压力,并支持深度数据分析。 - **数据采集方案:** - 支持多种数据源的采集,包括消息采集、文件采集、话单采集等。 - 对采集的数据进行...

    OpenGL = Hello World

    在提供的压缩包文件“HJGLKViewControllerDemo-master”中,我们可以推测这是一个OpenGL示例项目的源码仓库,很可能包含了Objective-C或者Swift的代码,因为文件名中的“ViewController”通常与iOS应用的视图控制器...

    Maven 3 入门 -- HelloWorld

    创建 Maven 项目的第一步是编写 `pom.xml` 文件,这是 Maven 的核心,包含了项目的元数据,如项目名称、版本、依赖等。一个基本的 `pom.xml` 文件如下: ```xml xmlns:xsi=...

    maven第三方仓库配置

    `pom.xml`是Maven的核心配置文件,它包含了项目的元数据和构建逻辑。以下是一个典型的`pom.xml`示例: ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...

    Android Hello World工程项目

    2. **AndroidManifest.xml**:这是一个重要的元数据文件,定义了应用的结构、权限和组件信息。在这个项目中,你会看到`<activity>`标签,声明了`MainActivity`作为应用的主要入口点。 3. **res/layout/main_...

    Hello_World:我的仓库

    5. **版本控制**:作为一个仓库,"Hello_World"可能使用了Git进行版本控制,这意味着你可能会找到`.git`目录,其中包含项目的提交历史和其他元数据。你可以通过`git log`查看提交历史,`git checkout`切换到不同版本...

    ios的opencv的helloworld

    1. 下载OpenCV库:可以从OpenCV官网或者GitHub仓库获取适用于iOS的预编译版本或源代码。 2. 添加到Xcode项目:将下载的OpenCV框架添加到项目的“Link Binary With Libraries”部分,如果是源码,需要配置CMake或使用...

    amazon_helloworld_

    9. **版本控制**:虽然未提及,但在现代软件开发中,代码通常会存放在像Git这样的版本控制系统中,"amazon_helloworld_"可能也有对应的GitHub或Bitbucket仓库。 10. **安全与合规**:在AWS中,即使是最简单的"Hello...

    hello word 2012_5_13

    5. **数据备份**:压缩包可能是对某个阶段的代码库的备份,这样可以在系统故障或其他问题时恢复数据。 6. **SVN操作**:可能包含的文件可能有`.svn`隐藏目录,这是SVN工作副本的一部分,包含与仓库交互所需的信息。...

    hello word 04_24

    6. **编程学习路径**:从 "hello world" 开始,学习者通常会逐步接触更复杂的编程概念,如变量、条件语句、循环、函数、数据结构、算法等。 7. **版本控制最佳实践**:保持良好的注释习惯,合理命名分支,定期提交...

    PyPI 官网下载 | hello_robot_stretch_body-0.0.15.tar.gz

    "hello_robot_stretch_body-0.0.15"作为压缩包子文件的文件名,通常包含项目源代码、元数据文件(如setup.py或setup.cfg)、README、LICENSE等。其中,`setup.py`文件是Python项目的构建脚本,用于定义项目信息和...

    hello-world:测试仓库

    在这个名为"hello-world"的测试仓库中,我们可以推测这是一个用于学习或展示Python编程基础的项目。 Python是一种高级编程语言,以其简洁、易读的语法而闻名,适合初学者入门。"Hello, World"程序在Python中的实现...

    Hello-源码.rar

    在IT中,压缩文件是一种常见的数据存储和传输方式,它通过算法减少文件大小,节省磁盘空间并加快上传下载速度。RAR和ZIP是两种流行的压缩格式,它们可以将多个文件打包成一个单一的文件,便于管理和传输。RAR格式...

    ssm仓库管理例子

    在这个仓库管理项目中,所有关于库存的数据都将存储在MySQL数据库中,通过MySQL-Connector实现Java与数据库之间的连接和数据交互。 6. **Bootstrap**:Bootstrap是一个流行的前端开发框架,提供了丰富的UI组件和...

    python函数和函数传参ppt.zip

    Python函数和函数传参是编程基础中的重要概念,尤其在数据仓库领域,高效地组织代码和传递数据是至关重要的。在此,我们将深入探讨这两个主题。 首先,Python函数是一段可重用的代码块,它执行特定任务并可能接收...

    go版本的hello算法

    - **源代码仓库**: 本书的所有代码均托管在GitHub仓库([github.com/krahets/hello-algo](https://github.com/krahets/hello-algo)),方便读者下载和实践。 - **在线资源**: 提供了网站([hello-algo.com]...

Global site tag (gtag.js) - Google Analytics