在前面的文章中介绍了企业数据建设的由来及可能的发展方向,及数据建设能解的是什么问题,总结了数据可能发挥的作用与效益,这些都是数据处理后的表现形式,有价值的数据,都是由众多松散的原始数据处理加工而来的,而在数据的建设过程中,经常听到较多的是数据仓库的建设,那么,什么是数据仓库呢?
数据仓库(以下简单“数仓”)的概念在很早就被提出来,是数据库的一个分支,早期是决策支持系统(dss)和联机分析应用数据源的结构化数据环境,用于资料数据的沉淀,归类合理的存储结构,做系统化的分析整理,支撑各种决策系统,商业智能的需要。
数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。
从概念上看,数据仓库本身并不“生产”数据,也不“消费”任何数据,它的数据来源于外部,同时也输出给外部使用,数据仓库是面向主题、集成性、稳定性和时变性的数据集合,它的任何一个特点都是缺一不可的,没有稳定性和时变性的数据集合,试问能提供什么决策呢,数据的价值体现在它的时效性,对比性,追溯性。
从定义上看,数据仓库至少包括数据获取、数据存储、数据访问等三部分。数据获取,负责将外部的数据采集到数据仓库,数据的来源可能有多种,比如关系型数据、非关系型数据、文档数据等;数据采集来了,就要将它存储起来,为后续的处理与分析提供输入,这里的数据存储,它不是简单的将采集回来的数据直接存储,而是需要将数据进行清洗、归类、去重、去噪,然后按不同的粒度进行分类存储,为后继的数据输出,提供可“消费”的基本数据,可能在特定的场景下,还需要对数据进行更高层次的聚合与统计并保存起来,去响应一些较实时的场景(这里涉及到数据仓库的存储分层);数据访问,负责数据仓库的对外服务输出,数据只有输出去给外部系统使用,才能产生其应有的价值,数仓本身又不“消费”数据,这里的输出,可能是excel/pdf等文档的输出,也可能是输出到其他数据库媒价中(如mysql/oracle等),也可能通过API 接口输出到外部的系统界面上,根据实际的需要来进行定制。
数据仓库是大数据的基础,数据仓库规划建设的好坏,会影响到后续的数据输出需要,要考虑到数据组合的统计汇总、上钻下钻、明细、对比等各方面的需要。如果按传统的报表来建设,直接在数仓中存储各报表的结果数据,这样会生成很多烟囱式的数据,变成互不关联,利用率低,也不利于上钻下钻,维度组合的需要。那么,这个过程要怎么来做呢?
其实这个数仓的规划建设过程没有标准的答案,虽然市面上有很多案例,但那都是针对特定公司的业务开展的,不能照搬到过来就使用,还是要结合公司的实际情况来进行规划与设计,不能只看到表面,还要看到公司内部的数据规律,来讨论决定。我觉数仓的建设,要达到以下几点要求:
1、 存储原始数据
在过往的一些数仓建设过程中,很多都会在完成对原始数据的清洗处理后,将原始数据清除,美名释放空间。但是如果后续的数据有问题/或者有新的数据需求,又要从各个业务系统去重新拉取数据,相当于又是重复工作。对于原始数据的采集,可以采用增量的方式进行存储。
2、 清晰的数据分层(数据结构)
由于数仓的数据来源是多方面的,在源始数据入库后,需要对源始数据进清洗,形成一致的,准确的,干净的数据。而对数据的这个处理过程,可能是需要多个分层来完成的,要明确每一个分层的作用域、定位,降低每一个分层之间的依赖关系。市面上较多的是四层分法:ODS(源数据层)、DWD(数据明细层)、DWS(数据轻汇总层)、ADS(数据应用层)。
3、数据可追溯性
数据的可追溯性,才能实现数据的上钻下钻的能力,如果数据没有关联性,那将无法保证数据的准确性。由于提供给下游系统的数据一般都是结果数据,当结果数据出现问题时,数据的血缘关系可以帮助快速定位问题所在。
4、数据关系条理化
一般用到数据仓库的,都是公司存在多套业务系统,业务系统间存在复杂的数据关系,由于数据的孤立性,导致每套业务系统都可能存在主数据,比如客户信息可能同时存在ERP、WMS、CRM等系统上。而数仓可以对相同主题的数据进行统一的建模,把复杂的数据关系梳理成条理清晰的数据模型,从而避免上述的问题。当然,这个建模的过程需要从整体上去把握数据的关系,结合各个系统的产品经理进行讨论,整理出结果。
5、降低开发复杂度
这个也是大数据火热的原因,大数据的表现形式之一就是提供统一的对外数据服务,让下游业务系统/业务员可以较简单地获取到想要的数据,而不是像传统一样,要去每个业务系统导出数据,然后自己在整理(处理),在导入系统(生成excel)。数仓利用数据的分层加工,逐步在每一层沉淀数据,数据开发人员只需要按需,从已有的数据分层上获取自己想要的数据。当然,前提是数据分层的规划及数据粒度要定义好,在每一层都可以沉淀前一层的汇总数据,又可以往上层回溯。
6、数据稳定性
数仓的数据逐层加工的原则,会使上层的数据都是由下层的数据加工而来,不允许直接跳级取数。每一层的数据都具有一定的独立性,只要ETL的作业没有运行,每一层的数据都是相对稳定,不会因为底层的源数据发生变化,而导致到上层的数据直接变化,只有达到ETL作业运作时,数据才会从最底,向上层一层层更新,保证对外的应用数据是稳定的。
基于上面的要求,结合公司的实际情况,就可以来制定数仓的分层及数据域等方面的建设,数仓的分层市面上有很多方案,各有各的说法与好处,至于要怎么做,在下一篇文章中进行介绍,欢迎关注。