首先我们说说什么是ETL,英文Extract-Transform-Load,用来描述将数据从源端经过抽取,转换,加载至目的端得过程,ETL常用于再数据仓库,但其对象并不限于数据仓库。
ETL主要得环节为数据抽取,数据转换,数据加载,在抽取过程中有几种方式:全量抽取和增量抽取。
全量抽取:将数据表或视图完全从源库抽取出来,转换成ETL工具可识别的格式。
增量抽取:抽取自上次抽取结果变化得数据,包括增加或修改,因此捕获数据变化尤为关键,要准确性和高效性,一般捕获数据变化有几种方式:
1) 触发器:一般建立新增,修改,删除三个触发器,当触发器检测到对应的库表操作时,抽取线程从临时表抽取数据。
2)时间戳:一种基于快照比较得变化数据捕捉方式,源表增加一个时间字段,更新数据时同时更新时间戳,这样在统计数据做对比时,可以根据系统时间与时间戳字段抽取数据做对比。
ETL工具:Powercenter,Apache Camel,Apache Kafka,Heka,Kettle
数据仓库更多的是对管理决策过程的支持,主要表现为四个特点:
1.面向主题:更多的是针对一个明确定义主题,保留与其相关的数据,摒弃掉不相关得数据。
2.集成的:将不同的数据源集成到一个数据源,做统一的ETL处理。
3.不可修改的:数据装载以后很少做传统数据库增删改处理,更多的是查询工作。
4.随时间变化的:关键数据更多是反应随时间变化。
整个数据仓库得实现大致为以下过程:
1.数据采集:首先为数据获取(包含结构化数据:关系数据库,半结构化数据:xml,json等 ,非结构化数据:图片,视频等)
2.缓冲区(贴源区)STG:这里不会对数据做过多的处理,目的为做数据备份,可添加一些字段作为标识使用,即成临时存储区。
3.原子区ODS:这里为了将之前获取到的数据标准化处理,并解决关联关系,截至到此多数使用关系型数据库(Oracle,Mysql等)做相关操作。
4.数据仓库:
1)主题:开始根据实际业务需求创建明确的主题模型。
2)量度:分析技术指标,获取要统计的指标,作用于以后得管理决策。
3)粒度:根据量度得聚合程度,对数据做更详细的粒度划分。
4)维度:设计数据得关联层次,层级,减少冗余。
这里需要分享的是维度建模得概念:分为星形模型和雪花模型
星形模型特点--架构相对简单,OLTP-DW环节不需要做多表关联,性能略高一些,会产生数据冗余。
雪花模型特点--架构相对复杂,DW-OLAP环节利于度量值聚合,性能略高一些,不会产生数据冗余。这里又存在两个概念:事实表和维表。
事实表用来分析记录得全量信息,包括每个事件得具体要素。维表则是围绕事实表得要素做发散式关联得表述信息,可从多角度观察事实表
建议在项目中,数据量极大或业务逻辑过于复杂时可采用雪花模型,业务逻辑比较清晰及节省存储空间。否则星形架构更适合于查询存储。
在从业务数据库向数据仓库抽取数据的后,数据并不是一成不变的,数据随时间缓慢的变化得维表称为缓慢变化维(1.记录所有历史 2.仅记录当前状态 3.记录之前两次得状态)。
5.数据集市:根据公司得具体业务分支,凭借原生数据或者企业数据仓库获取单独的数据集合针对该业务做数据分析处理等操作。。