数据仓库与数据挖掘记录 三
数据仓库的数据存储和处理
数据的ETL过程
数据 ETL 是用来实现异构数据源的数据集成,即完成数据的抓取/抽取、清洗、转换 .加载与索引等数据调和工作,如图 2. 2 所示。
1)数据提取
(Extract)
从多个数据源中获取原始数据
(如数据库、日志文件、API、云存储等)。
数据源可能是结构化(如 MySQL)、半结构化(如 JSON)、非结构化(如文本)。
关键技术:SQL 查询、Web 爬虫、日志采集工具(如 Flume)。
2)数据转换
(Transform)
对数据进行清洗、规范化、聚合、去重等处理,以满足数据仓库的需求
。
典型转换操作:
数据清洗:去除重复值、填充缺失值、数据格式转换。
数据标准化:将数据转换为统一格式(如日期格式统一为 YYYY-MM-DD)。
数据聚合:按时间、类别等维度汇总(如计算日均销售额)。
数据去重:删除重复记录。
关键技术:Python Pandas、SQL 处理、Spark 数据流处理。
3)数据加载
(Load)
将转换后的数据存入数据仓库或数据湖,供 BI 分析或机器学习使用
。
加载方式:
全量加载:一次性导入所有数据,适用于初始化。
增量加载:只导入新增或变更的数据,适用于日常更新。
关键技术:批量插入(Batch Insert)、流式数据处理(Kafka + Spark Streaming)。
ETL 的目标
抽取、转换、加载过程的目的是为决策支持应用提供一个单一的、权威的数据源。因此,要求 ETL 过程产生的数据(即调和数据层)是详细的、历史的、`规范化的.可理解的.即时的和质量可控制的。
(1) 详细的。数据是详细的(不是概括的) ,为不同用户构造数据提供最大灵活性,以满足他们的需要。
(2) 历史的。数据是周期性的,用来提供历史记载。
(3) 规范化的。数据是完全规范化的(如第三范式或更高级的范式)。规范化的数据比非规范化的数据能提供更完整 ,更灵活的使用。反向规范化对于改进调和数据层的性能;常不是必需的,因为调和数据通常使用批处理定期访问。然而,导出层的数据往往是非规范化的,一些流行的数据仓库或数据集市的核心数据结构是非规范化的。
(4) 可理解的。要求站在企业整体的角度设计调和数据层数据,它的设计要同企业数据模型一致
(5) 即时的。除了实时数据仓库体系结构之外,数据不需要是实时的。然而,数据必须是足够当前的,以使决策制订能够及时做出反应。
(6) 质量可控制的。调和数据必须有公认的质量和完整性,因为它们将被聚集进数据集市且用于决策制订。
ETL 过程描述
数据的 ETL 过程如图 2. 3 所示 ,由 4个步骤组成,即抽取 清洗 .转换.加载与索引
。事实上,这些步骤可以进行不同的组合,如可以将数据抽取与清洗组合为一个过程 ,或者将清洗和转换组合在一起。通常,在清洗过程中发现的拒绝数据信息会送回到源操作型业务系统中,然后将数据在源系统中加以处理,以便在以后重新抽取。
数据抽取
从源文件和源数据库中获取相关数据用于填充数据仓库,称为抽取
。 并非所有包含在不同操作型业务系统中的数据都需要抽取,通常只需要其中的一个子集。
抽取数据的一个子集是基于对源系统和目标系统的扩展分析 ,一般会由终端用户和数据仓库专家共同决定。
数据抽取的两个常见类型是静态抽取(static extract) 和增量抽取(incremental extract)
。
静态抽取
用于最初填充数据仓库,是一种在某一时间点获取所需源数据快照的方法 ,源数据的视图独立于它被创建的时间。
增量抽取
用于进行数据仓库的维护,仅仅获取那些从上一次获取之后源数据中所发生的变化; 最普遍的方法是日志获取,数据库日志包括数据库记录中最近变化的后像。
抽取数据进入集结区域的一个关键是源系统中的数据质量。特别是
-
数据命名的透明度
。 以使数据仓库设计者确切地知道什么数据存放于哪个源系统中。 -
由一个源系统实施的业务规则的完整性和准确性。这将直接影响到数据的精度,而且源系统中的业务规则应该同数据仓库中使用的规则相匹配。
-
数据格式
。路数据源的统一格式有助于匹配相关的数据。
数据清洗
为什么需要数据清洗
通常接受的事实是,ETL 过程的作用是为了识别错误数据,而不是处理它们。应该在适当的源系统中进行处理错误数据,以使由于系统过程错误所造成的错误数据不再重新出现。丢弃错误数据且在下一个从相关源系统的反馈中重新处理。
但由于许多常见的原因 ,操作型业务系统中的数据质量很差,这些原因包括雇员和客户的数据登录错误、源系统的变化.损坏的元数据系统错误或抽取过程中对数据的破坏。因此,当源系统工作非常好的时候(例如,源系统使用默认的,但是不准确的值) ,也不能假定数据就是干净的。其中的一些错误和典型的数据不一致性如下。
(1) 错误拼写的名字和地址。
(2) 不可能的或错误的出生日期。
(3) 没有使用目的的字段。
(4) 不匹配的地址和电话区号。
(5) 缺失的数据。
(6) 重复的数据。
(7) 跨源的不一致性(例如不同的地址等。
下面是一些错误数据的例子。
客户名字常常用作主码或者客户资料的搜索条件。然而,这些名字常被错误拼写 ,或以几种方式来拼写。
另一种数据污染发生在当一个字段用于某目的时,但实际并不想用这个字段。例如 ,在一个银行中,一个记录字段被设计成保存一个电话号码。然而,不需要使用这个字段的某分支机构负责人就决定用该字段来存储利率。你可能想知道为什么这样的错误在操作型业务数据中如此普遍。
操作型数据的质量在很大程度上决定了由它们所属的企事业组织单位聚集这些数据的价值。因为这些数据的准确程度对下游的数据仓库应用程序是很重要的。
假定错误经常发生,对一个企业或其他组织来说,最坏的事就是把操作型数据简单地复制到数据仓库中。事实上 ,可以通过一种称为数据清洗的技术来改善源数据的质量。
数据清洗(data scrubbing)是一种使用模式识别和其他技术 ,在将原始数据转换和移到数据仓库之前来升级原始数据质量的技术
。怎样清洗随着属性变化的每条数据,在每个ETL 清洗的步骤中值得考虑分析。每次对源数据做出改变时 ,数据清洗技术必须被重新评价。当数据很明显是坏数据时 ,一些清洗就会完全地拒绝这些数据,而且发送一个消息给源系统,让它修正错误数据,同时为下一次抽取做准备。在完全拒绝数据之前,其他清洗结果可能为更详细的手工分析标记数据(例如 ,为什么一个销售员售出比其他销售员多出好几倍的货物) 。
成功的数据仓库 需要实现一个全面质量管理(total quality management,TQM)的正式程序。TQM 侧重于缺陷的预防,而不是缺陷的纠正
。虽然数据清洗可以帮助提高数据质量,但并不是一个长期的解决数据质量问题的方法。
数据转换
数据转换在数据的 ETL 过程中处于中心位置,它把数据从源操作型业务系统的格式转换到企业数据仓库的数据格式。数据转换从数据抽取阶段接收数据(如果需要数据清洗,则在数据清洗之后) ,将数据映射到调和数据层(EDW 或 ODS)的格式,然后传递到加载和索引阶段。
数据转换可能只是简单的数据格式等表示方式的变化,也可能是高度复杂的数据组合的变化。
有时 ,数据清洗功能和数据转换功能混合在一起
。通常情况下 ,数据清洗的目的是纠正源数据中数据值的错误 ,而数据转换的目的是把源系统中的数据格式转化成目标系统的数据格式。数据转换前进行清洗是非常必要的,因为如果数据在转换之前有错误,错误在转换之后仍会保留。
数据转换包括许多功能,这些功能可以分为两大类: 记录级功能和字段级功能。在大多数数据仓库应用中,需要一些甚至所有这些功能。
- 记录级功能
对一组记录,例如一个文件或一个表进行操作,是最重要的记录级功能,包括选择 、连接、规范化和聚集。因为选择 .连接.聚集常可用 SQL 语句完成,所以记录级转换通常在操作型数据存储或企业数据仓库中进行。
选择也称为子集化,是一个根据预先定义的规则分割数据的过程。对于数据仓库应用,选择功能用于从源系统中抽取相关数据,源系统将用来填充数据仓库。因此,选择可以说是抽取功能的一部分。当源数据是关系表时,SELECT 语句可以用于选择功能。
连接将来自不同源的数据合并到一个单一的表和视图中。连接数据是数据仓库应用中的一个重要功能,因为从不同的源中合并数据常常是必需的。例如 ,一个保险公司的客户数据可能分布在不同的文件和数据库上。当源数据是关系表时,SELECT 语句可用于执行连接操作 。
- 字段级功能
字段级功能把数据从源记录中给定的格式转变到目标记录中不同的格式。字有段级功能有两种类型: 单字段和多字段。
单字段转换是把数据从单源字段转换到单目标字段。单字段转换的一个例子是把度量单位从本地标准(如斤)转换到公制(千克)。单字段转换有两种基本方法: 算法和表查找。算法转换是使用公式或多辑表达式来执行转换,如使用公式从华氏温度到摄氏温度的转换。当一个简单算法不能实施转换时,可以考虑使用一个查找表(如编码与名称映射表等)来解决。
多字段转换是把数据从一个或多个源字段转换到一个或多个目标字段。这种类型的转换在数据仓库应用中是非当普遍的。
在图 2.4 中给出了两个源字段转换成一个目标字段的例子,两个源字段被映射到一个目标字段中。在源记录表中,商品单价和销售数量是更明细的数据; 但在目标记录表中 ,该组合被映射成了销售金额 ,以便于数据的汇总,这里可以通过算法(金额王单价X数量)来完成转换。但一些复杂转换可能需要创建一个查找表来实现。
数据加载和索引
加载和索引,即是把数据加载到数据仓库或数据集市的过程。填充企业数据仓库的最后一步是加载所选择的数据到目标数据仓库中,并且创建所需的索引。加载数据到目标EDW 中的两个基本方式是刷新方式和更新方式。
刷新方式(refresh mode)是一种填充数据仓库的方法,采用在定期的间隔对目标数据进行批量重写的技术。也就是说,目标数据起初被写进数据仓库,然后每隔一定的时间,数据仓库被重写 ,替换以前的内容。现在这种加载方式越来越不流行了。
更新方式(update mode)是一种只将源数据中的数据改变写进数据仓库的方法。为了支持数据仓库的周期性,便于历史分析,新记录通常被写进数据仓库中,但不覆盖或删除以前的记录,而是通过时间截来分辩它们。
刷新方式通常用于数据仓库首次被创建时填充数据仓库。更新方式通常用于目标数据仓库的维护。刷新方式通常与静态数据获取相结合 ,而更新方式常与增量数据获取相结合。
在刷新或更新数据后,有必要创建或维护数据仓库的索引。位图索引和连接索引当被用于数据仓库环境。
因为数据仓库保存了从不同的源系统中集成而来的历史数据,对数据仓库的用户来说,知道数据从何而来非常重要。元数据可以提供关于特定属性的信息,但是元数据也必须表示历史(例如源可能随时间而变)。如果有更多的源或知道哪一个特定的抽取或加载文件把数据放在了数据仓库中 ,或者哪个转换程序创建了数据,更详细的过程可能是必需的(这对于提示数据仓库中所发现的错误源可能是必需的) 。因此 ,跟踪数据仓库数据来源也是有其复杂性的。
相关文章:

数据仓库与数据挖掘记录 三
数据仓库的数据存储和处理 数据的ETL过程 数据 ETL 是用来实现异构数据源的数据集成,即完成数据的抓取/抽取、清洗、转换 .加载与索引等数据调和工作,如图 2. 2 所示。 1)数据提取(Extract) 从多个数据源中获取原始数据(如数据…...

第12周:LSTM(火灾温度)
1.库以及数据的导入 1.1库的导入 import torch.nn.functional as F import numpy as np import pandas as pd import torch from torch import nn1.2数据集的导入 data pd.read_csv("woodpine2.csv")dataTimeTem1CO 1Soot 100.00025.00.0000000.00000010.22825.…...

MySQL的SQL执行流程
项目查询数据库的流程 用户通过Tomcat服务器发送请求到MySQL数据库的过程。 用户发起请求:用户通过浏览器或其他客户端向Tomcat服务器发送HTTP请求。 Tomcat服务器处理请求: Tomcat服务器接收用户的请求,并创建一个线程来处理这个请求。 线…...
Foundation CSS 可见性
Foundation CSS 可见性 引言 在网页设计中,CSS可见性是一个至关重要的概念。它决定了元素在网页上是否可见,以及如何显示。Foundation CSS 是一个流行的前端框架,它提供了丰富的工具和组件来帮助开发者构建响应式和可访问的网页。本文将深入探讨 Foundation CSS 中的可见性…...

7. Docker 容器数据卷的使用(超详细的讲解说明)
7. Docker 容器数据卷的使用(超详细的讲解说明) 文章目录 7. Docker 容器数据卷的使用(超详细的讲解说明)1. Docker容器数据卷概述2. Docker 容器数据卷的使用演示:2.1 宿主 和 容器之间映射添加容器卷2.2 容器数据卷 读写规则映射添加说明2.3 容器数据卷的继承和共…...

算法——结合实例了解广度优先搜索(BFS)搜索
一、广度优先搜索初印象 想象一下,你身处一座陌生的城市,想要从当前位置前往某个景点,你打开手机上的地图导航软件,输入目的地后,导航软件会迅速规划出一条最短路线。这背后,就可能运用到了广度优先搜索&am…...

qt QCommandLineOption 详解
1、概述 QCommandLineOption类是Qt框架中用于解析命令行参数的类。它提供了一种方便的方式来定义和解析命令行选项,并且可以与QCommandLineParser类一起使用,以便在应用程序中轻松处理命令行参数。通过QCommandLineOption类,开发者可以更便捷…...

Linux权限提升-内核溢出
一:Web到Linux-内核溢出Dcow 复现环境:https://www.vulnhub.com/entry/lampiao-1,249/ 1.信息收集:探测⽬标ip及开发端⼝ 2.Web漏洞利⽤: 查找drupal相关漏洞 search drupal # 进⾏漏洞利⽤ use exploit/unix/webapp/drupal_dr…...
【环境安装】重装Docker-26.0.2版本
【机器背景说明】Linux-Centos7;已有低版本的Docker 【目标环境说明】 卸载已有Docker,用docker-26.0.2.tgz安装包安装 1.Docker包下载 下载地址:Index of linux/static/stable/x86_64/ 2.卸载已有的Docker 卸载之前首先停掉服务 sudo…...

【云安全】云原生- K8S API Server 未授权访问
API Server 是 Kubernetes 集群的核心管理接口,所有资源请求和操作都通过 kube-apiserver 提供的 API 进行处理。默认情况下,API Server 会监听两个端口:8080 和 6443。如果配置不当,可能会导致未授权访问的安全风险。 8080 端口…...

笔记7——条件判断
条件判断 主要通过 if、elif 和 else 语句来实现 语法结构 # if 条件1: # 条件1为真时执行的代码 # elif 条件2: # 条件1为假、且条件2为真时执行的代码 # elif 条件3: # 条件1、2为假、且条件3为真时执行的代码 # ... # else: # 所…...

Word 公式转 CSDN 插件 发布
经过几个月的苦修,这款插件终于面世了。 从Word复制公式到CSDN粘贴,总是出现公式中的文字被单独提出来,而公式作为一个图片被粘贴的情况。公式多了的时候还会导致CSDN禁止进一步的上传公式。 经过对CSDN公式的研究,发现在粘贴公…...
二次封装axios解决异步通信痛点
为了方便扩展,和增加配置的灵活性,这里将通过封装一个类来实现axios的二次封装,要实现的功能包括: 为请求传入自定义的配置,控制单次请求的不同行为在响应拦截器中对业务逻辑进行处理,根据业务约定的成功数据结构,返回业务数据对响应错误进行处理,配置显示对话框或消息形…...

算法——结合实例了解深度优先搜索(DFS)
一,深度优先搜索(DFS)详解 DFS是什么? 深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树、图的算法。其核心思想是尽可能深地探索分支,直到无法继续时回溯到上一个节点…...

数据结构(考研)
线性表 顺序表 顺序表的静态分配 //线性表的元素类型为 ElemType//顺序表的静态分配 #define MaxSize10 typedef int ElemType; typedef struct{ElemType data[MaxSize];int length; }SqList;顺序表的动态分配 //顺序表的动态分配 #define InitSize 10 typedef struct{El…...
使用SSE协议进行服务端向客户端主动发送消息
1.创建一个SSE配置类: 1.1代码如下:package com.campus.platform.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.AsyncS…...
FastAPI 高并发与性能优化
FastAPI 高并发与性能优化 目录 🚀 高并发应用设计原则🧑💻 异步 I/O 优化 Web 服务响应速度⏳ 在 FastAPI 中优化异步任务执行顺序🔒 高并发中的共享资源与线程安全问题 1. 🚀 高并发应用设计原则 在构建高并发应…...

DFS+回溯+剪枝(深度优先搜索)——搜索算法
目录 一、递归 1.什么是递归? 2.什么时候使用递归? 3.如何理解递归? 4.如何写好递归? 二、记忆化搜索(记忆递归) 三、回溯 四、剪枝 五、综合试题 1.N皇后 2.解数独 DFS也就是深度优先搜索&am…...

在cursor/vscode中使用godot C#进行游戏开发
要在 Visual Studio Code(VS Code)中启动 C#Godot 项目,可以按照以下步骤进行配置: 1.安装必要的工具 • 安装 Visual Studio Code:确保你已经安装了最新版本的 VS Code。 • 安装.NET SDK:下载并安装.NET 7.x SDK(…...
vant4 van-list组件的使用
<van-listv-if"joblist && joblist.length > 0"v-model:loading"loading":finished"finished":immediate-check"false"finished-text"没有更多了"load"onLoad">// 加载 const loading ref(fals…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...