数据仓库ETL技术探究

2023-10-30

ETL概述

在构建商业智能系统的时候,如何正确有效地将分散在各个不同数据源中的信息整合到系统中成为了整个系统成败的关键,直接影响到系统的运行效率和最终结果。
ETL正是解决这一问题的有力工具。
ETL是指把数据从数据源装人数据仓库的过程,即数据的抽取(Extract)、转换(Transform)和装载(Load)过程。ETL过程的实质就是符合特定规则的数据流动过程,从不同异构数据源流向统一的目标数据。其间,数据的抽取、清洗、转换和装载形成串行或并行的过程,每个过程都必须符合特定的规则。根据国内外众多实践得到的共识,ETL规则设计和实施所需工作量约占整个项目的60%~80%。由于ETL过程的重要性和复杂性,如何设计正确、高效的ETL过程已经成为了商业智能系统构建过程中无法回避的重要问题。

1 数据理解

在设计ETL过程之前,有一项非常重要但经常被人们所忽略的工作,那就是数据理解。
数据理解是通过大量的调研和统计工作,了解数据的存储方式、数据量的大小、数据的格式、数据的业务含义等信息,同时还需要统计各种数值型数据的最大值、最小值和平均值,统计非数值型数据中各种不同的取值以及各种不同取值的个数。有了以上信息,ETL以后各个步骤的设计才能做到有的放矢,达到正确、高效的目的。

2 数据抽取

从源文件和源数据库中获取相关数据用于填充数据仓库,称为数据抽取。并非所有包含在不同操作型业务系统中的数据都需要抽取,通常只需要其中的一个子集。抽取数据的一个子集是基于对源系统和目标系统的扩展分析,一般会由终端用户和数据仓库专家共同决定。
在集成端进行数据的初始化时,一般需要将数据源端的全部数据装载进来,这时需要进行全量抽取。全量抽取类似于数据迁移或数据复制,它将数据源中的表或视图的数据全部从数据库中抽取出来,再进行后续的转换和加载操作。全量抽取可以使用数据复制、导入或者备份的方式完成,实现机制比较简单。
全量抽取完成后,后续的抽取操作只需抽取自上次抽取以来表中新增或修改的数据,这就是增量抽取

目前,数据抽取所涉及的单个技术环节都已相对成熟,但整体的集成度还很不够。市场上所提供的大多是数据抽取工具,这些工具通过用户选定源数据和目标数据的对应关系,会自动生成数据抽取的代码。但数据抽取工具支持的数据种类是有限的,同时数据抽取过程涉及数据的转换,它是一个与实际应用密切相关的部分,其复杂性使得不可嵌入用户编程的抽取工具往往不能满足要求。
因此,实际的数据仓库实施过程中往往不一定使用抽取工具。整个抽取过程能否因工具的使用而纳入有效的管理、调度和维护则更为重要。从市场发展来看,以数据抽取、异构互连产品为主项的数据仓库厂商一般都很有可能被其它拥有数据库产品的公司吞并。在数据仓库的世界里,它们只能成为辅助的角色。

3 数据清洗

数据仓库的外部数据源所提供的数据内容并不完美,存在着“脏数据”,即数据有空缺、噪声等缺陷,而且在数据仓库的各数据源之间,其内容也存在着不一致的现象。
为了控制这些“脏数据”对数据仓库分析结果的影响程度,必须采取各种有效的措施,对其进行处理,这一处理过程称为**“数据清洗”(Data Cleaning)。对于任何数据仓库而言,数据清洗过程都是必不可少的。
不同类型的“脏数据”,清洗处理的方法是不同的。
对于
数据空缺**:忽略元组、用一个全局常量填充、用属性的平均值填充、使用与给定元组同类的所有样本的平均值填充空缺值、使用最可能的值填充空缺值、使用像Bayesian公式或判定树这样的基于推断的方法;
对于噪声数据,可以用分箱或聚类等方法处理;
对于不一致的数据,则必须依据数据仓库所应用领域的特点,使用特定的方法加以解决。

4 数据转换

数据转换指接收来自不同运作系统的输入并将其转换成目标数据仓库中需要的格式的过程,包括数据的合并、汇总、过滤、转换等。
在设计数据转换时,由于数据源之间往往存在着不一致的问题,因此数据转换必须做到数据名称及格式的统一,同时对于源数据库中可能不存在的数据需要创建新的数据逻辑视图并进行相应的转换。

(1)直接映射。数据源字段和目标字段长度或精度相同,则无需做任何处理。
(2)字符串处理。从数据源的字符串字段中获取特定信息作为目标数据库的某个字段,则对字符串的操作有类型转换、字符串截取等。由于字符类型字段的随意性也可能造成脏数据的出现,所以在处理这种规则的时候,需要异常处理。
(3)字段运算。对于数值型字段来说,有时数据源的一个或多个字段进行数学运算而得到目标字段,则需要某些字段运算。
(4)空值判断。对于数据源字段中的NULL值,可能在目标数据库进行分析处理时会出问题,因此必须对空值进行判断,并转换成特定的值。
(5)日期转换。由于目标数据库中的日期类型格式是统一的,所以对数据源字段的日期格式需要相应的转换。
(6)聚集运算。对于目标数据库事实表中的一些度量字段,通常需要通过数据源一个或多个字段运用聚集函数进行聚集运算得来,常用的聚集函数有: sum. count,avg,min,max。
(7)既定取值。这条规则对于目标字段取一个固定的或是依赖系统的值,而不依赖于数据源字段。

5 数据加载

数据加载负责将经过前几步清洗和转换后的数据按照目标数据库元数据定义的表结构装入数据仓库。加载数据到目标数据仓库的两个基本方式是刷新方式和更新方式
**刷新方式(Refresh Mode)**是一种填充数据仓库的方法,采用在定期的间隔对目标数据进行批量重写的技术。也就是说,目标数据起初被写进数据仓库,然后每隔一定的时间,数据仓库被重写,替换以前的内容。这种加载方式越来越不流行。
**更新方式(Update Mode)**是一种只将源数据中的数据改变写进数据仓库的方法。为了支持数据仓库的周期,便于历史分析,新记录通常被写进数据仓库中,但不覆盖或删除以前的记录,而是通过时间戳来分辩它们。
刷新方式通常用于数据仓库首次被创建时填充数据仓库。更新方式通常用于目标数据仓库的维护。刷新方式通常与全量抽取相结合,而更新方式常与增量抽取相结合。

6 ETL过程建模

ETL过程是传统的数据处理过程,其输入是数据仓库数据源的各种业务处理系统的数据库,输出部分是数据仓库。ETL过程通常可以看做是一个以数据处理为中心的工作流,工作流中包括了数据抽取、数据转换、清洗以及数据加载等操作。ETL工具是负责处理这一类流程的数据集成工具。ETL过程设计的正确与否关系到数据仓库的可用性。
ETL过程的设计质量往往取决于能否对业务需求和数据仓库环境进行形式化建模。ET工作流模型包括ETL概念模型和ETL逻辑模型两部分。
在ETL流程设计中,首先应该根据业务需求和相关数据源的结构建立概念模型,确定源数据库与目标数据库之间的映射关系,然后根据概念模型建立逻辑模型。

6.1 ETL概念模型

概念建模是整个ETL流程设计的最初阶段。在这个阶段,ETL流程设计者的主要任务是搜集用户的需求,然后分析相关数据源的结构及其内容,确定抽取操作所使用的数据源。ETl概念模型主要是建立数据源与数据仓库的模式或者属性之间的映射关系,以及在映射过程所需要的转换和清洗操作。
ETL概念模型并不针对具体的工具制定,与数据库系统无关,与应用程序无关,与工具无关。在这一概念级中,不必考虑物理实现的细节,只把注意力集中在构造源与目标实体及属性之间的映射和转换关系上。

在这里插入图片描述
在这里插入图片描述
1.为了保证目标数据仓库中数据的完整性,需要从sl和s2两个数据源抽取数据,对它们执行并(union)操作。
2.为了与数据仓库中事实表的模式一致,必须对s1中的customer表和city表执行外连接,而且还要将s2中date属性的数据类型为日期格式(mm / dd / yyyy)转换成中国的日期格式(vy / mm / dd),还需要根据s2的其他属性组合(name、email)为s2表计算生成一个主键。
3.并运算、外连接运算以及日期转换属于概念模型中的转换transform),PK则属于约束(ETLconstrain)。

6.2 ETL逻辑模型

ETL概念模型并不是一个完整的工作流模型,它定义了数据源与目标数据仓库属性之间的映射关系以及中间必要的转换,但并不关注转换的语义以及执行顺序。
ETL流程的逻辑模型是一个以数据为中心的工作流模型,在逻辑建模阶段,ETL流程的设计者需要明确定义数据流所经过的各个活动的操作语义,并确定整个流程中各个活动的执行顺序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据仓库ETL技术探究 的相关文章

  • 民安智库(第三方满意度调研公司):满意度调查,选择适合的数据分析方法

    满意度调查是企业了解客户对其产品或服务满意程度的重要工具 而选择适合的数据分析方法则是解读调查结果的关键步骤 不同的数据分析方法可以提供不同的洞察和见解 帮助企业更好地理解客户需求 优化产品和服务 本文将分享民安智库 北京第三方绩效管理评估
  • 电商API的探索之旅:从请求示例到高并发挑战

    在数字化时代 电商系统已成为商业领域不可或缺的一环 电商API作为电商系统的重要组成部分 承担着连接前端和后端的桥梁角色 其重要性不言而喻 本文将深入探讨电商API的核心技术 从请求示例到高并发处理 为您揭示电商API的探索之旅 一 电商A
  • 使用 Java 停止运行 Kettle Job/Transformation

    我也在使用 Java 开发基于 Web 应用程序的 ETL 使用 Kettle 引擎 我在尝试停止正在运行的作业时遇到了问题 我不确定使用 CarteSingleton java 是否正确 我正在使用自定义单例地图 我的代码如下 Job j
  • iceberg集成hive,insert失败问题排查与解决

    背景 创建iceberg表成功 CREATE TABLE iceberg test1 i int STORED BY org apache iceberg mr hive HiveIcebergStorageHandler insert数据
  • SSIS 中的 OData 源组件未连接

    这是上一个问题的后续问题 SSIS 中的 OData 源组件挂起 https stackoverflow com questions 48026984 odata source component in ssis hanging Setup
  • 【状态估计】电力系统状态估计中的异常检测与分类(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及详细文
  • Python 中的最佳 ETL 包

    我有两个用例 从 Oracle PostgreSQL Redshift S3 CSV 提取 转换并加载到我自己的 Redshift 集群 安排作业每天 每周运行 INSERT TABLE 或 INSERT NONE 选项更好 我目前正在使用
  • 在 Talend 中加载一组文件的策略

    我想知道在 Talend 中解决以下问题的最佳策略是什么 我需要从存储在名称类似于 SAMPLE1 DAT SAMPLE2 DAT SAMPLEX DAT 的目录中的一组分隔文件中加载数据 目标将是 MySQL 数据库中的一个表 我必须立即
  • ErrorColumn 值不作为 Lineage ID 存在

    在插入目标表期间 发生的任何错误都会被重定向到错误表 我们可以在其中看到ErrorCode and ErrorColumn 问题是我们得到了一个值ErrorColumn它不存在于包中的任何地方 也就是说 没有一个列具有LineageID等于
  • 创建实时数据仓库

    我正在做一个个人项目 其中包括创建数据仓库 DWH 的完整架构 在本例中 作为 ETL 和 BI 分析工具 我决定使用 Pentaho 它具有许多功能 从允许轻松创建仪表板到完整的数据挖掘流程和 OLAP 多维数据集 我读过数据仓库必须是关
  • 如何使用脚本任务声明工作表?

    我试图声明一个工作表来处理 xlsx 文件的单元格 但当我声明工作表对象时 我的 C 脚本失败 Microsoft Office Interop Excel Application xlApp new Microsoft Office In
  • 使用执行 SQL 任务的参数映射

    我正在尝试创建一个临时表并将数据插入到 foreach 循环容器内的执行 SQL 任务内的临时表中 这是sql任务 IF OBJECT ID TEMPDB DBO TEMP IS NOT NULL DROP TABLE TEMP GO CR
  • 从事务性平面数据库填充事实表和维度表的最佳实践

    我想在 SSIS SSAS 中填充星型模式 多维数据集 我准备了所有维度表和事实表 主键等 源是一个 平面 项目级别 表 我现在的问题是如何拆分它 并将其从一个放入相应的表中 我做了一些谷歌搜索 但找不到令人满意的解决方案 人们会认为这是
  • 如何在 SSIS 变量中存储“完全限定”和“仅名称”文件名

    我有一个 SSIS 包 其中有一个 Foreach 循环容器 加载静态文件夹中的所有 txt 文件 我将完全限定的文件名作为在连接字符串中使用的变量传递 我现在只需将文件名传递给一个变量以用于执行存储过程 问题是如果我将 Foreach 循
  • 根据单元格位置将选择性字段从 Excel 批量插入到 SQL

    我有一个 SSIS 包 我必须从 Excel 工作表中选择一些值并将它们插入到 SQL Server 数据库表中 我是通过执行 sql 任务来完成的 这些是步骤 从映射表中选择所有记录 单元格位置是动态的 因此将其保留在 SQL 表中 大约
  • 如何忽略在另一个任务的 run() 内触发的 Luigi 任务的失败

    考虑以下任务 import luigi class YieldFailTaskInBatches luigi Task def run self for i in range 5 yield FailTask i j for j in ra
  • 数据转换器 SSIS 数据流组件中相应列的转换数据类型应该是什么?

    我们的一台服务器上有普通的 Microsoft SQL Server 2008 我们决定在文件系统上创建 DTSX 文件 以便我们可以使用 BIDS 2008 打开 DTSX 文件 一种 SSIS 控制流组件 它从 Microsoft SQ
  • Oracle OLE DB 提供程序未在 SSIS 中列出

    我在 SSIS 和 VS2015 CM 方面遇到问题 我有一个包需要连接 Oracle 来获取一些数据 我安装了适用于 Win64 的 ODAC 和 Oracle 客户端 但看不到提供程序列表中列出的 OLE DB 的 Oracle 提供程
  • 删除或更改 ETL 中的记录

    我有一个表 我在上面构建了 ETL 服务 货物记录 到达 离开 进入表格 我已经这样做了 我的桌子将被删除 当项目标识符第二次到达数据库时 两条记录都被删除 label cost time x2 29 14 5 2020 01 00 00
  • 在压缩存档内的文本文件上运行“head”,而不解压存档

    问候 我接手了之前的团队并编写了处理 csv 文件的 ETL 作业 我在 ubuntu 上结合使用 shell 脚本和 perl csv 文件很大 它们以压缩档案形式到达 解压后 很多都超过 30Gb 是的 那是 G 旧进程是在 cron

随机推荐

  • IO流(一)

    IO概述 什么是IO java中I O的操作主要是靠java io包下的类和接口来实现的 IO分类 根据数据的流向 输入流和输出流 输入流 把数据从其他设备上读取到内存当中的流 输出流 把数据从内存当中写入到其他设备上的流 根据数据的类型分
  • [C++] 哈希详解

    目录 1 哈希概念 2 实现机制 2 1 插入时 2 2 查找时 2 3 缺陷 2 4 常见哈希函数 2 4 1 直接定制法 2 4 2 除留余数法 2 4 3 平方取中法 2 4 4 折叠法 注意 3 解决哈希冲突 3 1 闭散列 3 1
  • zabbix的安装配置及基本使用

    一 zabbix的安装 1 最小化安装操作系统 安装以下常用依赖包 yum install vim iotop bc gcc gcc c glibc glibc devel pcre pcre devel openssl openssl d
  • qcustomplot绘制动态曲线_第十讲 频域分析法(Nyquist曲线)

    金鸡一唱天下白 第九讲 根轨迹法 zhuanlan zhihu com 自动化人 知乎 www zhihu com 概述 频域 频率响应 分析法是研究控制系统的一种工程方法 典控制理论最重要 最主要的分析方法 应用系统的频率特性可以间接地分
  • 获取在本地缓存

    我们有时候需要获取在本地缓存 在这个时候我们大部分朋友们做不到 今天我找到啦这个的好办法 现在分享给你们 第一步 如果我们已登录并保存缓存的话 我们可以直接看下面的代码 这个是在我们需要的js里面获取缓存的数据 第二步 如果你还没完成登录并
  • 《计算机网络》——第四章知识点

    五类题型1 已知主机IP地址和子网掩码 求网络号2 已知主机IP地址和子网掩码 求子网 主机最多有多少个 3 已知网络号 X位子网号 求子网掩码4 已知网络号 要分成X个子网 求子网掩码和IP地址范围 5 已知子网掩码 求哪些IP地址属于同
  • 操作系统考研复习——第五章(设备管理)

    操作系统考研复习 第五章 设备管理 5 输入 输出 I O管理 5 1 I O管理概述 5 1 1 I O设备 1 什么是I O设备 2 I O设备的分类 按使用特性 3 I O设备的分类 按传输速率分类 4 I O设备的分类 按信息交换的
  • 人机(AI)四人斗地主

    最近在使用Cocos Creator做一款四人斗地主的手机游戏 半成品 仅前端 代码附在最后 仅供参考 游戏中的单机 人机 模式以及游戏过程中的托管都需要出牌算法的设计 因此借这篇博客梳理一下现有的一些思路 首先 明确 AI出牌算法的目的是
  • 使用cmd命令行启动asp.net core 以及.net 5项目

    asp net core 通过CMD命令启动
  • 在 JavaScript 中将字符串转换为数字的 7 种方法

    1 使用 parseInt parseInt 解析一个字符串并返回一个整数 允许空格 仅返回第一个数字 这种方法虽然有一个限制 如果您解析十进制数 它将四舍五入到最接近的整数值 并将该值转换为string 可能需要使用parseFloat
  • antd tree树形控件 onCheck单选并准确获取父子节点

    antd 的tree树形控件为什么没有单选属性 还是我眼瞎没找到 需求 一个只能单选的tree树形控件 并且点击选中一个节点返回当前节点信息和父节点信息 看上去很普通的需求 但是实现起来真的麻烦 就因为tree的onCheck没有单选的问题
  • EDA软件_Cadence_OrCAD Capture DRC 警告分析

    大多数DRC warning甚至某些error可以忽略不计 不影响生成网表 但是要想成为一名成熟的电子工程师 你可以忽略某些错误 但是必须懂得为什么会产生这些错误 如何消除掉这些错误 这样才能控制这些错误的作用范围 不致影响系统整体的设计
  • django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but setting

    django core exceptions ImproperlyConfigured Requested setting DEFAULT INDEX TABLESPACE but settings are not configured Y
  • 微信小程序 富文本编辑器 editor

    完整微信小程序 Java后端 技术贴目录清单页面 必看 富文本编辑器 可以对图片 文字进行编辑 编辑器导出内容支持带标签的 html和纯文本的 text 编辑器内部采用 delta 格式进行存储 通过setContents接口设置内容时 解
  • React Native Hook浅析——state处理

    前言 前提知识 函数式组件在每次props state变动时 都会重新执行整个函数 重新渲染页面 在使用React的class组件时 我们可以使用state this xxx 以及生命周期 componentDidMount compone
  • 常用的免费好用的DNS有哪些?

    阿酷TONY 原创文章 关键词 免费dns 百度dns 阿里dns 114 dns Google DNS 2019 1 24 DNS Domain Name Server 域名服务器 是进行域名 domain name 和与之相对应的IP地
  • 通讯协议057——全网独有的OPC HDA知识一之接口(十二)IOPCHDA_DataCallback

    本文简单介绍OPC HDA规范的IOPCHDA DataCallback 客户端接口 接口方法 更多通信资源请登录网信智汇 wangxinzhihui com 1 HRESULT OnDataChange dwTransactionID h
  • qt应用程序界面控件刷新不及时问题

    可尝试以下方法 1 void showEvent QShowEvent event this gt setAttribute Qt WA Mapped QWidget showEvent event 2 界面控件切换前调用 show qAp
  • 隐私信息检索(PIR)

    隐私信息检索 Private Information Retrieval PIR 技术是由Chor B等提出解决保护用户查询隐私的方案 主要目的是 保证查询用户在向服务器上的数据库提交查询请求 在用户查询隐私信息不被泄漏的条件下完成查询 即
  • 数据仓库ETL技术探究

    ETL概述 在构建商业智能系统的时候 如何正确有效地将分散在各个不同数据源中的信息整合到系统中成为了整个系统成败的关键 直接影响到系统的运行效率和最终结果 ETL正是解决这一问题的有力工具 ETL是指把数据从数据源装人数据仓库的过程 即数据