数仓构建
1. 前期业务调研,如需求调研、数据调研、技术调研
2. 提炼业务模型、总线矩阵、划分主题域
3. 定制规范,如命名规范、开发规范、流程规范
4. 数仓架构分层
以阿里巴巴OneData建设为例:一般分为操作数据层(ODS:Operational Data Store)、公共维度模型层(CDM)和应用数据层(ADS)。其中公共维度模型层包括明细数据层(DWD和汇总数据层(DWS)。
公共维度模型层(CDM):存放明细事实数据、维表数据及公共指标汇总数据,其中明细事实数据、维表数据一般根据ODS层数据加工生成:公共指标汇总数据一般根据维表数据和明细事实数据加工生成。
CDM层又细分为DWD层和DWS层,分别是明细数据层和汇总数据层,采用维度模型方法作为理论基础,更多地采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联,提高明细数据表的易用性:同时在汇总数据层,加强指标的维度退化,采取更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工。
组合相关和相似数据:采用明细宽表,复用关联计算,减少数据扫描。
公共指标统一加工:基于OneData体系构建命名规范、口径一致和算法统一的统计指标,为上层数据产品、应用和服务提供公共指标;建立逻辑汇总宽表。
建立一致性维度:建立一致的数据分析维表,降低数据计算口径、算法不统一的风险。
应用数据层(ADS):存放数据产品个性化的统计指标数据,根据CDM层与ODS层加工生成。
5)选择合适的数据模型,不同的行业所选取的模型不尽相同,合适的模型,更利于在数据存储,计算,开发,安全,以及数据查询的效率,更能体现数仓的价值。
综上所述:数仓建设这个问题的范围过于大,它包含了一个0-1的过程,此处只做大方面的回答,具体的细节问题还需另外讨论。
传统数仓和大数据数仓的异同?有哪些大的变化? 区别主要是数仓数据存储的地方不同,传统数仓数据存储在Mysql/Oracle等关系型数据库上,大数据数仓存储在Hadoop平台的Hive中(实际上是HDFS中),当然也有其他的数仓产品比如TD、Greenplum等。
我接触过的传统数仓技术架构是使用Kettle做ETL工具,数据保存在Mysql中,使用MSTR Java开发的数据平台做可视化,随着数据量逐渐增大,事实表条数达到千万级,Kettle逐渐变得不稳定,单表做拉链的任务的执行时间也指数级增加,从1/2h到了6/7h。
公司考虑使用Hadoop平台的Hive做数据仓库,报表层数据保存在Mysql中,使用Tableau做报表系统,这样不用担心存储问题、计算速度也大大加快了。
在此基础上,公司开放了Hue给各个部门使用,这样简单的提数工作可以由运营自己来操作。
使用Presto可以做Mysql、Hive的跨库查询,使用时要注意Presto的数据类型非常严格。
数仓最重要的是什么? 数据的准确性,记得在一个统计网站上看过,好多数仓因为数据不准确被终止。数据的真正价值在于数据驱动决策,通过数据指导运营,在一个不准确的数据驱动下,结果可想而知。
如何保证数据的准确性? 元数据的建设与管理是其中重要的一个环节。元数据建设的目标是打通数据从接入到加工,再到数据消费的整个链路,规范元数据体系与模型,提供统一的元数据服务出口,保障元数据产出的稳定性和质量。首先梳理清楚元仓底层数据,对元数据做分类,如计算元数据、存储元数据、质量元数据等,减少数据重复建设,保障数据的唯一性。
另外,要丰富表和字段使用说明,方便使用和理解。根据元仓底层数据构建元仓中间层,建设元数据基础宽表,也就是元数据中间层,打通从数据产生到消费整个链路。
当然,也可在粒度、规范等方面展开,见仁见智。
如何做数据治理?数据资产管理呢? 在明确数据治理是数据管理的一部分之后,下一个问题就是定义数据管理。治理相对容易界定,它是用来明确相关角色、工作责任和工作流程的,确保数据资产能长期有序地、可持续地得到管理。
而数据管理则是一个更为广泛的定义,它与任何时间采集和应用数据的可重复流程的方方面面都紧密相关。
其实在数仓的整个链路中数据治理的理念是渗入其中的,在ETL过程中开发人员会对数据清洗这其实就是治理的一部分,再加上后期数据资产的管理和落定都有数据治理的渗入。
如何控制数据质量? 1. 数据质量保证原则:完整性,准确性,数据质量,及时性,一致性
2. 数据质量方法:数据资产等级的划定
3. 数据加工过程卡点校验
4. 风险点监控:针对在线或者离线数据的监控
5. 质量衡量:故障等级的划定以及数据质量的事件的记录 元数据的理解?元数据管理系统? 元数据主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及ETL任务的运行状态。
元数据有重要的应用价值,是数据管理、数据内容、数据应用的基础,在数据管理方面为集团数据提供在计算、存储、成本、质量、安全、模型等治理领域上的数据支持。
元数据管理系统:首先梳理清楚元仓底层数据,对元数据做分类,如计算元数据、存储元数据、质量元数据等,减少数据重复建设,保障数据的唯一性。
另外,要丰富表和字段使用说明,方便使用和理解。根据元仓底层数据构建元仓中间层,建设元数据基础宽表,也就是元数据中间层,打通从数据产生到消费整个链路。
数仓如何分层的?及每一层的作用? 结合Inmon和Kimball的集线器式和总线式的数据仓库的优点,分层可为ODS【-MID】-DW-DM-OLAP/OLAM/app(不同企业略有差异)。
ODS层是将OLTP数据通过ETL同步到数据仓库来作为数据仓库最基础的数据来源。在这个过程中,数据经过了一定的清洗,比如字段的统一,脏数据的去除等,但是数据的粒度是不会变化的。ODS层的数据可以只保留一定的时间。
MID中间层是采用Inmon集线器架构的方式,使用范式建模(贴源)的方法。这一层主要是做规范化的事情,比如应用库表非规范化,字段格式复杂(json格式)需做一些处理。这一层不是必须有的。也不会对外开放使用。范式建模保证了数据一致性、唯一性、正确性。
DW-DM层是采用Kimball的总线式的数据仓库架构,针对部门(比如财务部门)或者某一主题(比如商户、用户),通过维度建模(推荐星型模型),构建一致性维度,原子粒度的数据是DW层,按照实体或者主题经过一定的汇总,建设数据集市模型。数据集市可以为OLAP提供服务。
注:OLAM是On-line Analytical Mining,即联机分析挖掘又称多维数据挖掘,由加拿大Simon Fraser大学Jiawei Han教授等数据立方体的基础上提出的一种新的数据挖掘技术。OLAM技术将数据挖掘技术(DM)和联机分析处理技术(OLAP)集成在一起,在多维数据库中发现知识。
为什么要分层的思考? 空间换时间:通过建设多层次的数据模型供用户使用,避免用户直接使用操作型数据,可以更高效的访问数据。
复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
便于处理业务的变化:随着业务的变化,只需要调整底层的数据,对应用层对业务的调整零感知。
分层的价值
【易维护】 面向主题的特性决定了数据仓库拥有业务数据库所无法拥有的高效的数据组织形式,更加完整的数据体系,清晰的数据分类和分层机制。因为所有数据在进入数据仓库之前都经过清洗和过滤,使原始数据不再杂乱无章,基于优化查询的组织形式,有效提高数据获取、统计和分析的效率。 【高性能】 数据仓库的构建将大大缩短获取信息的时间,数据仓库作为数据的集合,所有的信息都可以从数据仓库直接获取,数据仓库的最大优势在于一旦底层从各类数据源到数据仓库的ETL流程构建成型,那么每天就会有来自各方面的信息通过自动任务调度的形式流入数据仓库,从而使一切基于这些底层信息的数据获取的效率达到迅速提升。
从应用来看,使用数据仓库可以大大提高数据的查询效率,尤其对于海量数据的关联查询和复杂查询,所以数据仓库有利于实现复杂的统计需求,提高数据统计的效率。 【简单化】 数据仓库是所有数据的集合,包括日志信息、数据库数据、文本数据、外部数据等都集成在数据仓库中,对于应用来说,实现各种不同数据的关联并使多维分析更加方便,为从多角度多层次地数据分析和决策制定提供的可能。 【历史性】 记录历史是数据仓库的特性之一,数据仓库能够还原历史时间点上的产品状态、用户状态、用户行为等,以便于能更好的回溯历史,分析历史,跟踪用户的历史行为,更好地比较历史和总结历史,同时根据历史预测未来。