数仓 重点在于建模,也就是理清思路,知道要怎么做,还要很具体的知道每个表用来干什么,每个表需要哪些字段。
数仓分层 可以使用不同的库来区分。多个数据层用多个数据库来存放不同层的数据。
即席查询 使用不同的表名区分主题。统一放在ads层就可以。然后将每个部门需要的数据,推送到相应部门自己的数据库中,数据量不大就推全量,数据量大就推增量。
假设财务部门的即席查询,那就建立一个财务的库,专门用来接收财务的相关数据,按照财务部门提出的需求,将计算结果的结果表放到财务的库中,从而达到即席查询的目的。如果需要在现有业务需求的基础上进行二次开发,可以根据开发需求将需要数据推过去。
另外,即席查询可以以使用Impala和hue来开展。相关内容到时候百度。
数据的etl 可以使用kettle这种专门的etl工具,我个人比较倾向于使用spark进行etl,但是逻辑复杂的etl还是使用kettle会好一些。
按模型建表 可以使用shell脚本建表,也会有一些建模建表工具。完成自动建表的过程。
数据保持一致性 使用主键关联,或者外键关联,使得这张表的数据在改变的时候,另一张相关表的数据能够一致更改。
使用oracle作为数仓底层存储手段的时候,可能要写一些存储过程,具体函数要按照需求开发。
(拿到的数据存在ods库里面,仓库里存的数据放到bas库里面,需要推送出去的数据放到stat或者其他库里面,就是数据仓库的采集,清洗和推送)
解释这句话,数据采集来,放在ods库,是为原始数据。清洗好的数据存到bas库,是为经过数据治理的数据。计算后的结果数据,放在stat或者其他库里面,是为即席查询的前期数据准备。然后再用定时任务,把各单位需要的数据推送到各单位的库里面,完成即席查询的准备。
按照建模完成的表,也就是经过数据治理的数据,全部放到bas库,不同的主题按照不同的表名开头区分。
借用上面这张图的架构总结一下:
拿到的增量数据进入预处理层,也就是经过格式转换进来的所有数据,需要拿到的数据都是每天的增量数据,也就是说,在这一层,将要面临清洗的数据都是每天的增量,原始数据不需要保存全量。如果有需要,保存定量时间的数据就可以,比如说一个月,三个月,一年。
在预处理层的数据表结构和ods层的表结构保持一致即可。
经过简单的数据治理,排除掉大量的垃圾数据后,剩余数据进入ods层,即为操作数据层(个人认为可以叫原始数据层)。
总结预处理层和操作数据层:
1.每天增量进入数据预处理层,然后定时抽取增量数据进入ods层,在ods层做数据全量,并且在ods层完成初步数据治理工作,比如filter无用数据。
2.每天数据进入数据预处理层,然后定时抽取增量数据,并在数据预处理层完成初步数据治理工作,然后将经过预处理的数据放入ods层,在ods层做单方面的原始数据汇总。
(这两层的关系只是个人思索,没有经过具体指正)
Data Warehouse Detail(DWD)数据仓库明细层和 Data Warehouse Summary(DWS)
数据仓库汇总层,是业务层与数据仓库的隔离层,是最接近数据源中数据的一层,数据源中的数据进过ETL后装入本层。这一层主要解决一些数据质量问题和数据的完整度问题。DW层的表通常包括两类,一个用于存储当前需要加载的数据,一个用于存储处理完后的历史数据。
dwd层,采用维度退化的方法,将维度退化到事实表,减少事实表和维度表的关联,提高明细表的易用性。
这里要明确的是:
1.采用了一个方法,这个方法将数据的维度退化到事实表
2.建立了一个明细表
(使用退化维度的方法将维度属性写入到事实表中。)
dws层,数据汇总层
就是主题宽表
不一定就是只一张表
dws就是 数据较高程度的聚合,不同类型的内容要聚合到一起,冗余
这样查某个主题的指标,只需要去这几个宽表查就好了!
宽表
意思是 把很多的 维度、指标都合到一个表里,需要冗余,为了后续数据统计方便
宽表由于把不同的内容都放在同一张表存储,宽表已经不符合三范式的模型设计规范,随之带来的主要坏处就是数据的大量冗余,与之相对应的好处就是查询性能的提高与便捷。总结ods和DW:
基础概念:(抓住重点:DW是反映历史变化,ODS是反映当前变化)
数据仓库(Data Warehouse):是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。时效:T+1
操作数据存储(ODS):是一个面向主题的、集成的、可变的、当前的细节数据集合,用于支持企业对于即时性的、操作性的、集成的全体信息的需求。
ODS是数据仓库体系结构中的一个可选部分,是DB与DW之间的中间层,ODS具备数据仓库的部分特征和OLTP系统的部分特征。
时效:实时
最后的ads层,数据应用层,在这一层根据业务部门的需求,将数据按照需求进行计算,然后将计算结果推到相应的部门数据库,做到即席查询的需求。
dim,也就是维度层。根据各层的数据建立维度表。
数栈-数据开发规范浅析数据库(DB)、操作数据存储(ODS)和数据仓库(DW)的区别与联系