ETL 数据抽取

ETL

ETL 数据抽取

ETL(Extract, Transform, Load)是数据集成和处理的重要过程,其中数据抽取(Extract)是第一步,负责从各种数据源中提取数据。以下是ETL数据抽取的详细说明和常用工具:

1. 数据抽取的方法
1.1 从数据库中提取数据
  • 使用 SQL 查询:对于像 MySQL、Oracle 和 SQL Server 这类数据库,ETL 工具通常会利用 SQL(结构化查询语言)来提取数据。例如,通过编写简单的 SELECT 语句,可以从一个或多个表中获取所需的数据。
  • 数据库连接驱动:ETL 工具通过特定的数据库连接驱动来与数据库进行通信。这些驱动是软件组件,能够理解数据库的协议并将 ETL 工具的请求转换为数据库能够理解的操作。例如,Java - based 的 ETL 工具可能会使用 JDBC(Java Database Connectivity)驱动来连接数据库。当配置 ETL 工具时,需要指定数据库的连接信息,如主机名、端口号、数据库名称、用户名和密码等。驱动会根据这些信息建立与数据库的连接,然后执行提取数据的操作。
1.2 从 API 中提取数据
  • HTTP 请求:当把 API 作为数据源时,ETL 工具会通过发送 HTTP(超文本传输协议)请求来获取数据。对于 RESTful API,ETL 工具发送 GET 请求来检索数据。例如,要从一个提供天气数据的 API 获取某个城市的天气信息,ETL 工具可能会发送如下的 GET 请求,这个请求的 URL 指向了 API 的端点,其中包含了查询参数(如城市名称和数据类型)。ETL 工具会根据 API 的文档构建正确的请求 URL,然后发送请求。API 会返回数据,通常是 JSON 或 XML 格式,ETL 工具再对返回的数据进行解析。
  • 认证和授权:在与 API 交互时,可能需要进行认证和授权。常见的认证方式包括 API 密钥、OAuth 等。ETL 工具需要在请求中包含这些认证信息,以确保能够成功获取数据。
1.3 从文件系统中提取数据
  • 文件读取:ETL 工具可以读取各种格式的文件,如 CSV、TXT、XML 等。这些文件可以存储在本地文件系统或网络共享位置。ETL 工具通过文件路径和读取操作来提取数据。
  • 文件监听:对于需要实时处理的文件,ETL 工具可以设置文件监听器,当文件发生变化时,自动触发数据抽取操作。
2. 数据抽取的模式
2.1 全量抽取
  • 全量加载(Full Load):将所有经过处理的数据一次性加载到目标存储中,适用于初始加载或数据量较小的情况。
2.2 增量抽取
  • 增量加载(Incremental Load):只加载抽取和转换后发生变化的数据,以保证数据的实时性和效率。
  • 数据变更检测:增量抽取需要检测数据的变化,常用的方法包括:
    • 时间戳:记录每次数据抽取的时间戳,只抽取时间戳之后发生变化的数据。
    • 变更日志:利用数据库的变更日志(如 MySQL 的 binlog、PostgreSQL 的 WAL)来检测数据变化。
    • 触发器:在数据库表上设置触发器,记录数据变化的信息,ETL 工具根据这些信息进行增量抽取。
3. 常用的 ETL 工具
3.1 Kettle
  • 简介:Kettle 是一款免费的开源 ETL 工具,使用广泛,功能强大。它通过图形化界面(Spoon)设计 ETL 转换过程,支持批量运行(Pan)和任务调度(Kitchen)。
  • 优点
    • 纯 Java 编写,跨平台运行。
    • 数据抽取高效稳定。
    • 支持丰富的数据源和转换功能。
  • 使用场景:适用于各种数据抽取、转换和加载任务,特别是需要复杂数据处理和转换的场景。
3.2 DataX
  • 简介:DataX 是一款开源的数据同步工具,由阿里巴巴开源。它支持多种数据源,包括关系型数据库、NoSQL 数据库、文件系统等。
  • 优点
    • 高效的数据同步能力。
    • 支持多种数据源和数据格式。
    • 简单易用,配置灵活。
  • 使用场景:适用于大规模数据同步和数据迁移任务,特别是需要高效数据传输的场景。
3.3 Apache Nifi
  • 简介:Apache Nifi 是一款开源的实时数据流处理工具,适合处理实时数据流。
  • 优点
    • 实时数据处理能力强大。
    • 支持多种数据源和数据格式。
    • 提供丰富的数据处理组件。
  • 使用场景:适用于需要实时数据处理和流式数据处理的场景,如物联网数据处理、实时监控等。
3.4 Talend Open Studio
  • 简介:Talend Open Studio 是一款功能强大的开源 ETL 工具,支持各种数据源,适合批量和实时 ETL。
  • 优点
    • 功能丰富,支持多种数据源和数据格式。
    • 提供图形化界面,易于使用。
    • 支持复杂的数据转换和处理。
  • 使用场景:适用于企业级数据集成和处理任务,特别是需要处理多种数据源和复杂数据转换的场景。

总结

ETL 数据抽取是数据集成和处理过程中的关键步骤,负责从各种数据源中提取数据。通过选择合适的 ETL 工具和数据抽取方法,可以确保数据抽取的高效性、准确性和可靠性。在实际应用中,需要根据企业的业务需求和数据特点选择合适的 ETL 工具,并合理配置和优化其抽取功能。

从 Oracle 数据库中抽取数据

从 Oracle 数据库中抽取数据有多种方法,以下是常见的几种方法及其具体操作步骤:

1. 使用 SQL 语句

这是最直接的方法,适用于简单的数据抽取需求。通过编写 SQL 查询语句,可以直接从 Oracle 数据库中查询并导出数据。例如,使用 SELECT 语句按照条件查询表中的数据。

2. 使用 Oracle 导出工具

对于数据量较大的情况,可以使用 Oracle 提供的导出工具,如 EXP 和 EXPDP,将数据导出到文件中进行传输或备份。

3. 使用 Oracle 数据集成工具

Oracle 提供了多种数据集成工具,如 Oracle GoldenGate 和 Oracle Data Integrator(ODI),可以实现更复杂的数据操作,包括实时数据抽取、数据转换和数据加载等。

3.1 Oracle GoldenGate

Oracle GoldenGate 是一种实时数据复制和数据集成技术,可以将数据实时从 Oracle 数据库中抽取到目的地,包括数据仓库、Hadoop、NoSQL 等大数据平台。它能够实时捕获数据库变更,并将这些变更应用到目标解决方案中。具体步骤如下:

  • 创建 GoldenGate 抽取进程:
    ADD EXTRACT et_myora, SOURCEISTABLE;
    
  • 定义抽取规则:
    ADD EXTRACT EXT1, INTEGRATED TRANLOG, BEGIN2019-10-16 00:00:00;
    
  • 开始抽取:
    START EXTRACT EXT1;
    
3.2 Oracle Data Integrator(ODI)

ODI 是一种强大的 ETL 工具,可以将数据从多个数据源(包括 Oracle 数据库)中抽取到数据仓库中,并进行数据变换和数据加载。具体步骤如下:

  • 创建 ODI 项目:
    CREATE PROJECT myODI;
    
  • 创建 ODI 模型:
    CREATE MODEL myModel (CONNECT: Oracle Source);
    
  • 创建源表和目标表:
    CREATE TABLE Source ();
    CREATE TABLE Destination ();
    
  • 创建 ODI 接口:
    CREATE INTERFACE myInterface (CONNECT: Oracle Source, Oracle Target);
    
  • 定义 ODI 接口变换规则:
    DEFINE TRANSFORMATION myTransform ();
    
  • 开始 ODI 接口:
    START INTERFACE myInterface;
    

4. 增量式抽取

当数据量较大时,一次性抽取全部数据较为耗时。通过增量式抽取,可以只抽取目标范围内发生过改变的数据,以最小化抽取的数据量,提高数据操作效率。SQL 语句实现增量式抽取的形式如下:

SELECT * FROM TABLE_NAME WHERE last_update_time > TO_DATE('2024-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');

5. 使用触发器和同步进程

可以通过创建 DML 和 DDL 触发器,将操作转换成对应的 SQL 语句,并通过 DBMS_CAPTURE_ADM 和 DBMS_APPLY_ADM 包进行数据同步。具体步骤如下:

  • 创建用户和表空间:
    CREATE USER EXTRACT IDENTIFIED BY PASSWD;
    CREATE TABLESPACE TBS_EXTRACT;
    GRANT CONNECT, RESOURCE, DBA TO EXTRACT;
    GRANT UNLIMITED TABLESPACE TO EXTRACT;
    
  • 创建 DML 和 DDL 触发器:
    CREATE OR REPLACE TRIGGER DML_EXTRACT
    AFTER INSERT OR UPDATE OR DELETE ON T1
    DECLAREV_STATEMENT VARCHAR2(4000);
    BEGINIF INSERTING THENV_STATEMENT := 'INSERT INTO T1 VALUES (:OLD.C1, :OLD.C2, :OLD.C3)';ELSIF UPDATING THENV_STATEMENT := 'UPDATE T1 SET C2 = :NEW.C2 WHERE C1 = :OLD.C1';ELSIF DELETING THENV_STATEMENT := 'DELETE FROM T1 WHERE C1 = :OLD.C1';END IF;DBMS_CAPTURE_ADM.PROPAGATE(V_STATEMENT);
    END;
    /
    CREATE OR REPLACE TRIGGER DDL_EXTRACT
    AFTER CREATE OR ALTER OR DROP ON DATABASE
    DECLAREV_STATEMENT VARCHAR2(4000);
    BEGINIF DICTIONARY_OBJ_TYPE = 'TABLE' THENV_STATEMENT := 'CREATE TABLE T1 (C1 NUMBER, C2 VARCHAR2(10), C3 DATE)';DBMS_CAPTURE_ADM.PROPAGATE(V_STATEMENT);ELSIF DICTIONARY_OBJ_TYPE = 'INDEX' THENV_STATEMENT := 'CREATE INDEX IDX_T1 ON T1 (C1)';DBMS_CAPTURE_ADM.PROPAGATE(V_STATEMENT);END IF;
    END;
    /
    
  • 创建同步进程:
    BEGINDBMS_CAPTURE_ADM.CREATE_CAPTURE(CAPTURE_NAME => 'CAPTURE_EXTRACT',QUEUE_NAME => 'QUEUE_EXTRACT',RULE_SET_NAME => 'RULE_SET_EXTRACT',STATUS => 'ENABLED');DBMS_APPLY_ADM.CREATE_APPLY(APPLY_NAME => 'APPLY_EXTRACT',QUEUE_NAME => 'QUEUE_EXTRACT',STATUS => 'ENABLED',APPLY_USER => 'APPLY',TABLE_CONFLICT_ACTION => 'REPLACE');
    END;
    /
    BEGINDBMS_CAPTURE_ADM.ADD_TABLE_RULE(CAPTURE_NAME => 'CAPTURE_EXTRACT',SCHEMA_NAME => 'TEST',TABLE_NAME => 'T1',OPERATION_MASK => DBMS_CAPTURE_PASSTHRU_INSERT + DBMS_CAPTURE_PASSTHRU_UPDATE + DBMS_CAPTURE_PASSTHRU_DELETE);
    END;
    /
    
  • 测试数据同步:
    INSERT INTO T1 VALUES (1, 'A', SYSDATE);
    UPDATE T1 SET C2 = 'B' WHERE C1 = 1;
    DELETE FROM T1 WHERE C1 = 1;
    

6. 使用 LogMiner 实现增量数据抽取

LogMiner 是 Oracle 提供的一种工具,可以用于捕获数据库的变更日志,从而实现增量数据抽取。具体步骤如下:

  • 配置 LogMiner:
    • 在源数据库中启用 LogMiner 功能。
    • 设置 LogMiner 参数,如日志文件的存储路径和保留时间。
  • 设计 ODI 抽取流程:
    • 在 ODI Studio 中创建新的数据集成项目。
    • 定义数据源和目标系统,配置数据库连接信息。
    • 选择 “Oracle 9i/10g/11g Consistent (LOGMINER)” 知识模块。
  • 实现增量抽取:
    • 设置增量抽取的起始时间点,ODI 将从此时间点开始读取数据库的变更记录。
    • 配置数据映射和转换规则,确保源数据正确映射到目标数据结构。
    • 执行数据集成任务,ODI 将自动读取 LogMiner 生成的变更记录,并抽取相应的增量数据。
  • 验证数据一致性:
    • 确保抽取的数据与源数据库中的数据一致。

7. 提取 XML 子节点值

如果需要从 Oracle 数据库中的 XML 数据中提取子节点值,可以使用 XMLTypeextractValue 函数,或使用 XMLTable 函数。例如:

  • 使用 XMLTypeextractValue 函数:
    SELECT extractValue(xml_column, '//nodeName') AS nodeValue
    FROM xml_table;
    
  • 使用 XMLTable 函数:
    SELECT *
    FROM xml_table,
    XMLTable('//nodeName' PASSING xml_column COLUMNS nodeValue VARCHAR2(100) PATH '.') x;
    

总结

从 Oracle 数据库中抽取数据的方法多种多样,具体选择哪种方法取决于数据抽取的需求、数据量大小以及是否需要实时性等。对于简单的数据抽取任务,可以使用 SQL 语句或导出工具;对于复杂的数据抽取任务,可以使用 Oracle GoldenGate 或 ODI 等数据集成工具。同时,增量式抽取和 LogMiner 技术可以有效提高数据抽取的效率和实时性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法-查找数组对角线上最大的质数

力扣题目:2614. 对角线上的质数 - 力扣(LeetCode) 给你一个下标从 0 开始的二维整数数组 nums 。 返回位于 nums 至少一条 对角线 上的最大 质数 。如果任一对角线上均不存在质数,返回 0 。 注意: 如果某个整数大于…

js:正则表达式

目录 正则表达式的语法 定义 检测 检索 元字符 边界符 量词 字符类 表单判断案例 修饰符 过滤敏感词 正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本字符组合模式 正则表达式是一…

Excel数据叠加生成新DataFrame:操作指南与案例

目录 一、准备工作 二、读取Excel文件 三、数据叠加 四、处理重复数据(可选) 五、保存新DataFrame到Excel文件 六、案例演示 七、注意事项 八、总结 在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFra…

HarmonyOS NEXT开发进阶(六):HarmonyOS NEXT实现嵌套 H5 及双向通信

文章目录 一、前言二、鸿蒙应用加载Web页面2.1 加载网络地址页面2.2 加载本地H5页面 三、实现Web组件 H5 层与鸿蒙应用层进行相互通讯3.1 鸿蒙应用向 H5 页面发送数据3.2 H5页面向鸿蒙应用发送数据 四、拓展阅读 一、前言 随着HarmonyOS NEXT的快速发展,越来越多的…

Linux Top 命令 load average 指标解读

前言 作为平台开发的同学,维护平台稳定性是我们最基本的工作职责,下面主要介绍下top 命令里 ,load average 这个指标如何去衡量机器负载程度。 概念介绍 load average 是系统在过去 1 分钟、5 分钟、15 分钟 的平均负载,它表示运…

uni-app编写微信小程序使用uni-popup搭配uni-popup-dialog组件在ios自动弹出键盘。

uni-popup-dialog 对话框 将 uni-popup 的type属性改为 dialog&#xff0c;并引入对应组件即可使用对话框 &#xff0c;该组件不支持单独使用 示例 <button click"open">打开弹窗</button> <uni-popup ref"popup" type"dialog"…

国产编辑器EverEdit - 扩展脚本:新建同类型文件(避免编程学习者反复新建保存练习文件)

1 扩展脚本&#xff1a;在当前文件目录下新建同类型文件 1.1 应用场景 用户在进行编程语言学习时&#xff0c;比如&#xff1a;Python&#xff0c;经常做完一个小练习后&#xff0c;又需要新建一个文件&#xff0c;在新建文件的时候&#xff0c;不但要选择文件类型&#xff0c…

C#使用OpenTK绘制3D可拖动旋转图形三棱锥

接上篇,绘制着色矩形 C#使用OpenTK绘制一个着色矩形-CSDN博客 上一篇安装OpenTK.GLControl后,这里可以直接拖动控件GLControl 我们会发现GLControl继承于UserControl //// 摘要:// OpenGL-aware WinForms control. The WinForms designer will always call the default//…

【Vue】点击侧边导航栏,右侧main对应显示

需求&#xff1a;点击侧边导航栏&#xff0c;右侧main对应显示 通过v-if或v-show等指令来控制不同内容的显示隐藏来实现 注意&#xff1a; 使用v-if时候进行导航栏切换&#xff0c;右侧显示区域可能会出现样式错乱&#xff1b;使用v-show则不会出现此错误 <template>&…

JAVA:利用 RabbitMQ 死信队列实现支付超时场景的技术指南

1、简述 在支付系统中&#xff0c;订单支付的超时自动撤销是一个非常常见的业务场景。通常用户未在规定时间内完成支付&#xff0c;系统会自动取消订单&#xff0c;释放相应的资源。本文将通过利用 RabbitMQ 的 死信队列&#xff08;Dead Letter Queue, DLQ&#xff09;来实现…

特制一个自己的UI库,只用CSS、图标、emoji图 第二版

图&#xff1a; 代码&#xff1a; index.html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>M…

1.14 互斥与同步

1.思维导图 2.有一个隧道&#xff0c;长1000m&#xff0c;有一辆高铁&#xff0c;每秒100米&#xff1b;有一辆快车&#xff0c;每秒50米&#xff1b;要求模拟这两列火车通过隧道的场景。 1>程序代码&#xff1a; #include <stdio.h> #include <string.h> #i…

14.STM32F407ZGT6-SPI

参考&#xff1a; 1.正点原子 前言&#xff1a; SPI一般用在中高速的外围器件上&#xff0c;如FLASH, GPS模块等。很常用的一种通信方式&#xff0c;学习总结很有必要。 1.SPI的概念及时序。 2.通过SPI操作Flash芯片。 37.1 SPI 及 NOR Flash 介绍 37.1.1 SPI 介绍 我们将从…

基于SpringBoot的中华诗词赏析文化交流平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

GPU算力平台|在GPU算力平台部署Qwen-2通义千问大模型的教程

文章目录 一、GPU平台介绍算力平台概述 二、人工智能应用开发需要GPU算力平台GPU算力原理账号注册流程Qwen-2通义千问大模型的部署登录/注册选择SettingsURL配置选择模型部署完成进行问答 一、GPU平台介绍 算力平台概述 GPU算力平台是一个专注于GPU加速计算的专业云服务平台&…

微信小程序集成Vant Weapp移动端开发的框架

什么是Vant Weapp Vant 是一个轻量、可靠的移动端组件库&#xff0c;于 2017 年开源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本&#xff0c;并由社区团队维护 React 版本和支付宝小程序版本。 官网地睛&#xff1a;介绍 - Vant Weapp (vant-ui.gith…

图形和动画本地化

图形和动画本地化是多媒体改编的一个关键方面&#xff0c;需要对技术技能和文化细微差别有深入的理解。当由母语人士和设计师进行时&#xff0c;这一过程达到了自动化系统通常无法复制的真实性和相关性水平。 本土专业人士对文化偏好、象征主义和视觉美学有着固有的理解&#…

浅谈云计算06 | 云管理系统架构

云管理系统架构 一、云管理系统架构&#xff08;一&#xff09;远程管理系统&#xff08;二&#xff09;资源管理系统&#xff08;三&#xff09;SLA 管理系统&#xff08;四&#xff09;计费管理系统 二、安全与可靠性保障&#xff08;一&#xff09;数据安全防线&#xff08;…

SpringBoot 基础学习

对于SpringBoot的了解&#xff0c;在初学者的角度看来&#xff0c;它是一种工具&#xff0c;用于简化一个Spring项目的初始搭建和开发过程。 1 入门案例 1.1 项目的创建 有四种方法创建&#xff0c;可以通过idea快捷创建&#xff0c;Spring的官网创建&#xff0c;阿里云创建&am…

基于springboot+vue的洪涝灾害应急信息管理系统设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…