当前位置: 首页 > 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
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Java精华积累:初学者都应该搞懂的问题
  • Just for fun——迅速写完快速排序
  • leetcode46 Permutation 排列组合
  • MD5加密原理解析及OC版原理实现
  • mysql中InnoDB引擎中页的概念
  • PhantomJS 安装
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • 给Prometheus造假数据的方法
  • 你真的知道 == 和 equals 的区别吗?
  • 手机端车牌号码键盘的vue组件
  • 手写双向链表LinkedList的几个常用功能
  • 微信小程序设置上一页数据
  • 用quicker-worker.js轻松跑一个大数据遍历
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (全注解开发)学习Spring-MVC的第三天
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (算法)N皇后问题
  • (转)为C# Windows服务添加安装程序
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .Net 8.0 新的变化
  • .net CHARTING图表控件下载地址
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • ::前边啥也没有
  • :“Failed to access IIS metabase”解决方法
  • :=
  • :如何用SQL脚本保存存储过程返回的结果集
  • @JsonFormat与@DateTimeFormat注解的使用
  • @SpringBootApplication 包含的三个注解及其含义
  • [ linux ] linux 命令英文全称及解释