当前位置: 首页 > news >正文

数据仓库【2】:架构

数据仓库【2】:架构

  • 1、架构图
  • 2、ETL流程
    • 2.1、ETL -- Extract-Transform-Load
      • 2.1.1、数据抽取(Extraction)
      • 2.1.2、数据转换(Transformation)
      • 2.1.3、数据加载( Loading )
    • 2.2、ETL工具
      • 2.2.1、结构化数据ETL工具
      • 2.2.1、非|半结构化数据ETL工具
  • 3、数据积存
    • 3.1、操作数据层(ODS)
  • 4、数据分析
    • 4.1、数据明细层(DWD)
    • 4.2、数据汇总层(DWS)
    • 4.3、数据应用层(ADS)

1、架构图

在这里插入图片描述

2、ETL流程

2.1、ETL – Extract-Transform-Load

  • 将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至目的端的过程
  • 构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先
    定义好的数据仓库模型,将数据加载到数据仓库中去
  • ETL 规则的设计和实施约占整个数据仓库搭建工作量的 60%~80%
    在这里插入图片描述

2.1.1、数据抽取(Extraction)

  • 抽取的数据源可以分为结构化数据、非结构化数据、半结构化数据
  • 结构化数据一般采用JDBC、数据库日志方式,非|半结构化数据会监听文件变动
    抽取方式
    • 数据抽取方式有全量同步、增量同步两种方式
    • 全量同步会将全部数据进行抽取,一般用于初始化数据装载
    • 增量同步方式会检测数据的变动,抽取发生变动的数据,一般用于数据更新

2.1.2、数据转换(Transformation)

  • 数据转换要经历数据清洗和转换两个阶段
    • 数据清洗主要是对出现的重复、二义性、不完整、违反业务或逻辑规则等问题的数据进行统一的处理
    • 数据转换主要是对数据进行标准化处理,进行字段、数据类型、数据定义的转换
  • 结构化数据在转换过程中的逻辑较为简单,非 | 半结构化数据的转换会较为复杂

2.1.3、数据加载( Loading )

  • 将最后处理完的数据导入到对应的目标源里

2.2、ETL工具

2.2.1、结构化数据ETL工具

  • Sqoop
  • Kettle
  • Datastage
  • Informatica
  • Kafka

2.2.1、非|半结构化数据ETL工具

  • Flume
  • Logstash

3、数据积存

3.1、操作数据层(ODS)

  • 数据与原业务数据保持一致,可以增加字段用来进行数据管理

  • 存储的历史数据是只读的,提供业务系统查询使用

  • 业务系统对历史数据完成修改后,将update_type字段更新为UPDATE,追加回ODS中
    在这里插入图片描述

  • 在离线数仓中,业务数据定期通过ETL流程导入到ODS中,导入方式有全量、增量两种

    • 全量导入:数据第一次导入时,选择此种方式
    • 增量导入:数据非第一次导入,每次只需要导入新增、更改的数据,建议使用外连接&全覆盖方式

4、数据分析

4.1、数据明细层(DWD)

  • 数据明细层对ODS层的数据进行清洗、标准化、维度退化(时间、分类、地域)
  • 数据仍然满足3NF模型,为分析运算做准备
    在这里插入图片描述

4.2、数据汇总层(DWS)

  • 数据汇总层的数据对数据明细层的数据,按照分析主题进行计算汇总,存放便于分析的宽表
  • 存储模型并非3NF,而是注重数据聚合,复杂查询、处理性能更优的数仓模型,如维度模型
    在这里插入图片描述

4.3、数据应用层(ADS)

  • 数据应用层也被称为数据集市
  • 存储数据分析结果,为不同业务场景提供接口,减轻数据仓库的负担
    • 数据仓库擅长数据分析,直接开放业务查询接口,会加重其负担
      在这里插入图片描述

相关文章:

  • 【PID精讲12】基于MATLAB和Simulink的仿真教程
  • 【二叉树】【单调双向队列】LeetCode239:滑动窗口最大值
  • 【C++练级之路】【Lv.5】动态内存管理(都2023年了,不会有人还不知道new吧?)
  • Ubuntu22.04-安装后Terminal无法调出
  • 【Linux学习笔记】Linux下nginx环境搭建
  • Mybatis-Plus基础之Mapper的映射规则
  • 【WPF】使用Behavior以及ValidationRule实现表单校验
  • 亚马逊云科技 re:Invent 大会 - ElastiCache Serverless 模式来袭
  • 线性代数基础【3】向量
  • Datawhale聪明办法学Python(竞赛题解版)
  • HBase基础知识(七):HBase 性能优化示例全解
  • isp代理/双isp代理/数据中心代理的区别?如何选择?
  • 智能三维数据虚拟现实电子沙盘
  • 图片素材管理软件Eagle for mac提高素材整理维度
  • 详解Keras3.0 Layer API: LSTM layer
  • 【刷算法】从上往下打印二叉树
  • 【译】理解JavaScript:new 关键字
  • Asm.js的简单介绍
  • HTML5新特性总结
  • JavaScript DOM 10 - 滚动
  • JDK 6和JDK 7中的substring()方法
  • magento2项目上线注意事项
  • PAT A1050
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 对超线程几个不同角度的解释
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 解析带emoji和链接的聊天系统消息
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 浅谈Golang中select的用法
  • 如何用vue打造一个移动端音乐播放器
  • 系统认识JavaScript正则表达式
  • 与 ConTeXt MkIV 官方文档的接驳
  • 原生Ajax
  • 2017年360最后一道编程题
  • 阿里云重庆大学大数据训练营落地分享
  • 数据可视化之下发图实践
  • ​用户画像从0到100的构建思路
  • !!Dom4j 学习笔记
  • #NOIP 2014# day.1 T2 联合权值
  • (12)目标检测_SSD基于pytorch搭建代码
  • (3)nginx 配置(nginx.conf)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (差分)胡桃爱原石
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (正则)提取页面里的img标签
  • (转)JAVA中的堆栈
  • (转)linux下的时间函数使用
  • (转)人的集合论——移山之道
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .NET 依赖注入和配置系统
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • []AT 指令 收发短信和GPRS上网 SIM508/548