• 数据仓库--些许经验之谈


    最近在做数据仓库的一些事情,想着写一篇博客来谈一下我认识的数据仓库,个中错误之处,还请指正。(20170918更新)

    先说一下个人项目大概:

      我做的是一个数据集市,面向分析师和营销部。将底层源数据通过表与表之间关联整合成一个一个主题,各个主题表之间又通过关键字进行关联,满足业务多场景、多维度的分析。

      关于数仓个人的一些看法:要能深入业务,也能跳出业务。跳出的目的是为了别让业务牵着鼻子走,你要尽可能的预见业务的潜在需求点,避免后期不断地修改维护风险。当然这灵活性很大,仁者见仁的事。关于这个点虽然一开始就知道,但是也没能做好。后期不断接受别人修改和维护。建设数仓的困难再有就是版本控制和展现也很重要。版本控制不多说,你更新了你的数仓,结果别人还在用旧的字典或表那就很尴尬了。至于展现,就像花了好多钱造了个飞机,大家却还在用自行车。我要是老板,就把你开除掉!

    介绍

      数据仓库当前有两个牛逼的人,一个是Inmon,另一个是kimball。两个人有着不同的主张,Inmon主张数据集市是数据仓库的子集,先设计底层数据并满足第三范式要求,在此基础之上构建数据集市。这样的好处,就是数据仓库易于维护并高度集成,缺点则是周期长,结构相对死板。Kimball则认为数据仓库是一系列数据集市的集合,底层建设成最低粒度的维度模型,对不同业务条线进行构建数据集市。优点就是:灵活方便,周期短见效快;缺点则是后期维护和数据集成困难。目前大多倾向于kimball方式(扩展阅读:http://qing.blog.sina.com.cn/2740714575/a35bfc4f330042oz.html),同样我们这里也更多的是说kimball的模型。

    事实表与维度表

      kimball在描述他的维度模型时,是面向企业数据的。一个主题或一个业务条线虽然更多的从部门角度出发,但从企业角度强调一致性。举个例子来说明一下事实表和维度表。我们去食堂吃饭,有消费事实(点几个数、付款等可加性事实)、也有维度(菜的价格、分量、冷热等文本描述;食堂的地理位置、名称、大小、消费模式等)。当我们创建一个消费主题时,就需要一个事实表和业务关心的维度进行有机结合。具体来说,维度表包含了对业务的文字描述。维度属性是查询的约束条件、分组与报表标签生成的基本来源。不同的维度交叉就会有事实,事实表承载事务数据。事实表根据粒度的角色划分不同,可分为事务事实表、周期快照事实包和累积快照事实表(少见)。对于周期和累积事实表,一般的粒度都比较高依赖满足对应的业务需求。

    星型模型和雪花模型

      顾名思义,星型模型是以一个事实表为中心,多个维度表进行关联的模型。而雪花模型在维度表之下还会有一层或多层维度。在Kimball看来,星型模型较雪花模型更具有可取型。雪花模型实现了规范化的存储(3NF)减少数据存储空间,同时以更小的维度表在查询时效率可能会更高。但实际场景下,事实表往往占据存储的90%,对维度表的规范化并不具有显著效果(往往也就是几十M数据的区别)反而将逻辑复杂化,导致后期维护的艰难和使用的繁琐。

    数据构建逻辑

      建设数仓时,都是面向企业来做,实现为各个部门和管理层建设数据的提取、分析的数据中心平台。数仓建设90%的工作,其实都在做维度表选择(如何保障多个业务条线能够统一使用同一维度是一个挑战性工作,一般企业都会有:日期维度表、产品维度表、客户维度表。以日期维度表来说,虽然事务级有日期数据,但是日期维度表可实现更多的日期属性,一般都是存留5-10年的数据)。方式为总线结构,以事实-维度矩阵作为概览,指导各个主题进行分别设计。说的很简单,谁做谁知道!

    关于分层

      经常被问到数据分层是什么样的。现实工作处理中一般都是3层(显而易见)。第一层:操作性源数据(ODS:operational data system),通过ETL将产线数据加载到你的数据目标位置上。之后建设你的主题形成数据集市,所以第二层:数据集市(DM:data mart);数据集市建设后,便是提供到业务进行使用,所以第三层就是应用层了(DA:data application),一般是报表数据等高度聚合数据。当然,不同的角度对数据仓库的分层也不一样,有人会增加一些临时层或过度层,比如维度-事实表的处理层;中间加工层等。暂时没有统一的标准。

    转载请注明出处!欢迎邮件沟通:shj8319@sina.com

  • 相关阅读:
    java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener问题解决
    开发人员系统功能设计常用办公软件分享
    微信自定义菜单url默认80端口问题解决
    Servlet再度学习
    JSP九大内置对象
    linux下安装apache(httpd-2.4.3版本)各种坑
    Ajax原理学习
    Shell脚本了解
    生成Webservice的两种方式(Axis2,CXf2.x)
    Webservice发布
  • 原文地址:https://www.cnblogs.com/SunHuaJ/p/7065232.html
Copyright © 2020-2023  润新知