数仓:数据仓库(放数据的)
数据库:也是放数据的
在放数据的这个方面来说,二者没有任何区别,都是放数据的,都是以表的的形式存放数据
他们对于用户的用处不同:
1、数据库:主要针对业务来用(联机事务处理)
数据的展现需要 前端,后台,数据库管理员 来配合实现
2、数仓:主要针对分析(它里面的数据不是说给到用户来展现的),作为公司的决策的依据(联机事务分析)
在源系统(业务系统)也能做报表,为什么要建立数仓?
因为每个源系统都有自己的功能,可以在这里进行分析或抽其他源系统的数据,但会影响这个系统的功能;
其次,应用系统之间会重复抽取数据,为了避免源系统频繁交互,需要构建数仓。
---------------------------------------------------------------数仓:数据的集合,用于支持管理决策
面向主题
集成
相对稳定
反映历史变化
-----数仓在逻辑上分为三层:
ODS(贴源层) ————————————> DW(数仓层) ——————————————————> DM(数据集市层)
---需要注意的是:
1、这三层只是逻辑的上分层
2、它们其实都还是表,只不过每个表的用处不同,所以在逻辑上把他们区分开
3、每一层都有自己的事情要做
-------数据流:
各个业务系统的数据(源系统) —> ODS层 —> DW层 —> DM层[ —> 报表展示]
ETL过程(工具、SP) SP/工具 sp[+FUN] [报表工具]
ETL开发 数仓开发 报表开发 [有可能是让前端画页面]
BI开发的工作职责就将 业务系统的数据通过一些列处理/操作 ,最后做成一张报表(管理驾驶舱的页面)来展示
--借鉴网址:
http://www.powerbi.com.cn/
---注意:不该你知道的事情,就说不知道
你的工作职责就是上面的这一句话,至于其他的,你可以稍微答一下
比如:你这个最后做出来用来给谁用,做啥决策
回答:不是很清楚,反正我知道是用来给公司领导看的,给他们作为决策的依据。至于说做啥决策,我就不清楚了
BI开发的岗位划分:ETL开发,数仓开发,报表开发 》》》》》》 全流程(资深) 》》》》》》》》》》》》》架构师
--至于进去项目组具体做哪一种:
1、看招人的是要哪种岗位
2、进去之后看哪种岗位有空缺,你更加适合哪种岗位
-------------------------------------------------------------------------事实表 和 维度表
ODS层的数据都是从业务系统抽取(同步)过来,不做任何更改:在跟业务系统的对接人员确定好数据后,再把数据抽取过来,抽取过来后不做更改
事实表 跟 维度表:在 DW层 去创建这些表
事实表:就是你要关注的对象/内容。比如:销量,销售额,收入,利润率 等。。。。
维度表:从某个维度/角度来观察你要关注的对象/内容。比如:时间,区域,组织,类型 等。。。
【例】某地区商品的销量,是从地区这个角度观察商品销量的。事实表就是销量表,维度表就是地区表。
“意义” --- 取决于人为,当然,也是一个很重要的东西。
1、一个版本周期,针对的业务数据,一般是一张事实表,多张维度表。这些维度表跟事实表进行关联(关联字段)
事实表一张,维度表多张
--注意:
上线时,都是先跑维度表,再跑事实表
上线:就是把你们开发代码,部署到另外一个环境(生产环境)上
环境:用来进行开发 或者 测试 或者 用户使用 的一个主体:
开发环境:开发来写代码
测试环境:测试用来进行测试
生产环境/正式环境:供用户来使用
代码流: 开发完成转测试 测试完成准备上线
开发环境 ——————————————————————> 测试环境(BI测试) ————————————————————————————> 生产环境
----------------------------------------------------------------模型的概念:星型模型 和 雪花模型
先把规划做好,然后按照这个规划去设计表和建表
星型模型:所有的维度表都是跟事实表直接相关(意思就是:所有的维度表跟事实表都有至少一个字段可以关联)
雪花模型:有存在至少任意一个维度表跟事实表不是直接相关,而是间接相关(意思就是:存在至少一个维度表中没有字段跟事实表进行关联,只能跟其他的维度表进行关联)
星型模型:会存在数据冗余,但是性能会好一些(用空间换效率)
雪花模型:不存在数据冗余,但是性能会差点(因为需要多张表进行关联)(用效率换空间)
----总结一下
关联方式 性能 空间
星型模型 直接关联 好一些 存在数据冗余,更占空间
雪花模型 至少一个间接关联 差一些 不存在数据冗余,空间相对来说要少占用一些
---注意:
1、在工作中,星型模型用的多一些
2、模型是由大佬(资深的BI开发或者架构师)来弄的。他们都是比较熟悉业务或者相关行业的业务逻辑,有成(niu)熟(bi)的技术
------------------------------------三范式(3NF)
是一个建表的规范。在建表的时候需要遵循这个规范来创建我们的表
第一范式:表里面不能出先同名的列,也不能一个同行同列出现两个值(说白了,就是一个单元格里面只能有一个值)
第二范式:一定要有主键属性(主键约束)。这个表里的所有的列都是围绕这个主键来展开的
主键可以由多个列组成(比如:身份证号码,可以拆分成三部分:出生地区 生日 性别)
第三范式:所有列里的值都是跟主键直接相关,而不是间接相关
比如:emp表中的数据都是围绕empno来展开的
主要是围绕主键,以及表里的值来展开
---注意:
是不是一定必须要遵守范式建表:不一定。规则是死的,人是活的。还是得按照最方便有效的来
----建表:
每一层(ods dw dm)都要建表。分别建各自的表:
1、ODS:将业务系统中的表中的一些需要抽取的字段抽取到对应的表的中(类型,长度)
2、DW:将ODS层的数据,按照不同需求,创建 事实表和维度表,然后将ODS层的数据归类整合到不同的表中
3、DM:将DW的数据按照需求计算一些指标,同步到对应的表中(类型,长度)
-------------------------------------------------拉链表(缓慢变化维)
保存历史数据的表
保存历史数据的三种方法:
1、不保存历史数据,直接在原数据上update,或者将原数据删除,insert一条新的数据
2、只保留上一次的历史数据。每一条数据一共有两条(标识的字段:0 ---无效 ,1 --- 有效)
3、保留所有的历史数据。每一条数据的数量就不一定了,但是肯定只有一条的标识为 1 ,其他的都是 0 --- 缓慢变化维