导图社区 大数据平台理论
数据在这个数据库的层次上,最多只会保存3-6个月,这里保存的是直接从业务系统中获取的原始数据,数据保存如果超过了保存到期限。
编辑于2022-03-20 23:05:05大数据平台理论
数据三大类型
结构化数据
像表格一样的数据(数据库、execl、csv..)
半结构化数据
json键值对格式数据
xml标记化语言
非结构化数据
图片、音乐、视频
数据分层
临时数据层ODS
概念
数据在这个数据库的层次上,最多只会保存3-6个月,这里保存的是直接从业务系统中获取的原始数据,数据保存如果超过了保存到期限,数据会被移动到历史数据层中进行存储。业务系统的数据源,如客户系统,结算系统,人工补录等。不同系统格式不同,
数据贴源层ODM
直接保存业务系统源数据的数据库位置
标准数据层SDM
进行不同数据格式上的统一
将所有日期统一成 yyyy-mm-dd hh24:mi:ss
将货币单位统一成元
数据仓库层DW
概念
抽取临时存储层的数据,这里的数据一般是保存三年左右的时间,这里的数据一定是筛选之后的有效数据。超过三年的数据会被删除掉。 在数据仓库层中,数据会进行一定范围内的初步汇总,例如临时层是所有的原始数据(用户在玩游戏的时候,每一次的点击和浏览的操作都会存储在临时层中,那么在数据仓库层中,可能就会对用户的详细数据以小时为维度先进行一次汇总等)
数据明细层DWD
对SDM的数据进行有效性筛选
筛选关键字为空的行
去重数据
删除异常数据
对数据进行合并和拆分
基础数据层FDM
对表格进行主题域划分
主题域
对所有相同功能和模块的数据,放在同一个表格中进行数据的存储
从销售系统、客户系统、接口数据、补录数据等不同数据源中,将所有和客户相关的数据全部提取出来放在同一个表格中,这个表格就叫主题域
常见主题域
客户主题:存储与我直接相关的用户信息
参与者主题:例如存储紧急联系人的信息或家人信息等
产品主题:和公司产品相关的所有信息
财务主题:存储公司以及各部门的收入支出信息
协议主题:所有的合同以及协议的数据
绩效主题:存储所有销售团队或个人销售信息
事件主题:所有和钱的流动相关的信息
公共主题:其他公共信息,例如汇率信息、拆解利率、万年历等
数据集市层DM
概念
抽取的是数据仓库层的数据,这里的数据保存没有时间的限制,集市中存储的数据,存储的是计算之后的指标结果。这里的数据一般维度会比较粗,例如月、季度、年等维度。
聚合数据层ADM
存储所有经过汇总计算之后的表格数据
报表层MDM
更加高度化汇总的集市层数据,对接后期的可视化报表系统,进行可视化报表页面输出的位置
历史数据层HDS
存储过了限制周期的临时层中的数据
分层的好处
因为我们需要保存每一次数据操作的成果,例如保存从业务数据中获取的数据,要保存统一格式的数据,要保存筛选之后的数据,要保存计算之后的数据 优点是可以减少重复的步骤操作。
数据库链接的创建方法
创建
create public database link 链接的名字 connect to 另一个数据库用户名 identified by “用户名密码” using ‘需要被连接的数据库的tns信息。
例
create public database link ln_odm connect to bonnie identified by "123456" using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-C3VUVG3II7U)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )';
tns
数据库连接需要的地址和端口号以及数据库名字等信息,合并成一个字符串,使用这个数据库链接,链接和读取另一个数据库的表格。
in_odm
PowerDesigner
安装
使用PD进行数据的建模操作
业务建模CDM
分析表格要存储的主要字段与内容;表格的功能与功能之间、业务与业务之间存在什么关系,尽可能分析并找出这些关系
对用户模块与博客模块的存储
用户模块
用户编号
邮箱
手机
昵称
密码
注册时间
关注
粉丝
头像
博客模块
博客编号
博客标题
博客内容
评论
阅读
推荐
发表时间
分析关系
用户模块
粉丝和关注的关系(多对多)
用户和博客模块
用户发表博客(一对多)
用户评论博客(多对多)
用户阅读博客(多对多)
用户推荐博客(多对多)
逻辑建模LDM
找出表格与表格之间的联系,并且添加一些必要的字段
物理建模PDM
将模型转换成不同数据库的SQL语句,进行表格或者其他数据库对象的创建,例如约束和索引等
tools-->generate pysical data model -->选择相应的数据库版本--> 生成模型
数仓中表格数据的建模
星型建模
考虑到未来的业务,有些业务和字段经常需要在一起被使用和计算的,这个时候这些字段我们会放在一起,当成一个小的事实表进行数据的存储,方便后期的数据计算。
雪花建模
将所有的数据,都拆分成单独的维度进行数据的存储,每个表格都严格的遵守数据库的第三范式,每个表格都不会存在冗余的数据。 这种建模方式会让数据库的表格数量变多,进行业务计算的时候,即使业务比较简单,也会让sql语句的逻辑变得比较复杂,需要连接比较多的表格。
ETL抽取方法
1、全量数据抽取
一般应用在数据量较小的表格中,或集市层的数据表格中
抽取方法
清空truncate目标表格,然后将源表格的数据insert into 全部更新到目标表格中
编写一个全量数据抽取的存储过程 create or replace procedure 新表 as begin execute immediate 'truncate table 旧表 insert into 旧表 select 旧表*,sysdate,'erp' from 新表@旧表; commit; end;
2、增量数据抽取
以时间为单位,将过去的某个时间周期的数据,抽取到目标表格中,一般以天的单位,今天抽取昨天的数据,也有财务月报表等,一个月抽取一次
抽取方法
先删除delete昨天的数据,然后将昨天的数据insert into抽取回来
编写一个增量数据抽取的过程 create or replace procedure 新表 as begin delete from 旧表 where to_date(dt,'yyyy-mm-dd')=trunc(sysdate-1,'dd'); commit; insert into 旧表 select 旧表.*,sysdate,;erp' from 新表@旧表 where to_date(dt,'yyyy-mm-dd')=trunc(sysdate-1,'dd'); commit; end;
3、镜像数据抽取
当表格没有时间字段的时候,使用主键或其他字段进行数据对比来判断是否有新的数据需要抽取。目标表和数据源的对比:merge into 语句
抽取方法
merge into 目标表格 a using (select 对于数据源的查询语句)b on (a.列=b.列) when matched then update set a.列=b.列 when not matched then insert(a.列) values(b.列);
create or replace procedure sp_mirror_caiwu as begin merge into odm_erp_info_t a using (select distinct * from caiwu@ln_erp) b on (a.id=b.id) when matched then update set a.dept=b.dept, a.operation=b.operation, a.reason=b.reason, a.money=b.money, a.dt=b.dt, a.etl_time=sysdate when not matched then insert(a.id,a.dept,a.operation,a.reason,a.money,a.dt,a.etl_time,a.syssource) values(b.id,b.dept,b.operation,b.reason,b.money,b.dt,sysdate,'erp'); commit; end;
数据库的范式
第一范式:表格的字段是独立不可拆分的
第二范式:先要满足第一范式;表格要有主键
第三范式:先要满足第二范式。表格其他字段,必须和主键是直接的关系
Oracle创建数据库
在Oracle里,用database configuration assistant来创建数据库
颗粒度
临时层最细-->数仓中加粗-->集市层最粗