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
    DECLARE
      V_STATEMENT VARCHAR2(4000);
    BEGIN
      IF INSERTING THEN
        V_STATEMENT := 'INSERT INTO T1 VALUES (:OLD.C1, :OLD.C2, :OLD.C3)';
      ELSIF UPDATING THEN
        V_STATEMENT := 'UPDATE T1 SET C2 = :NEW.C2 WHERE C1 = :OLD.C1';
      ELSIF DELETING THEN
        V_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
    DECLARE
      V_STATEMENT VARCHAR2(4000);
    BEGIN
      IF DICTIONARY_OBJ_TYPE = 'TABLE' THEN
        V_STATEMENT := 'CREATE TABLE T1 (C1 NUMBER, C2 VARCHAR2(10), C3 DATE)';
        DBMS_CAPTURE_ADM.PROPAGATE(V_STATEMENT);
      ELSIF DICTIONARY_OBJ_TYPE = 'INDEX' THEN
        V_STATEMENT := 'CREATE INDEX IDX_T1 ON T1 (C1)';
        DBMS_CAPTURE_ADM.PROPAGATE(V_STATEMENT);
      END IF;
    END;
    /
    
  • 创建同步进程:
    BEGIN
      DBMS_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;
    /
    BEGIN
      DBMS_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 技术可以有效提高数据抽取的效率和实时性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

雷达流量监测系统:精准监控水流,确保水资源安全

水是生命之源,水资源的有效管理和保护直接关系到人类的生存与发展。随着全球气候变化和人口增加,水资源的短缺问题日益严重,如何高效监控和管理水资源,成为了水利、环保、农业等多个领域亟待解决的重要问题。而在这一过程中&#…

战场物联网:通信挑战与最新解决方案综述

论文标题 The Internet of Battle Things: A Survey on Communication Challenges and Recent Solutions 作者信息 Rachel Kufakunesu, Herman Myburgh, Allan De Freitas 论文出处 Discover Internet of Things (2025) 5:3 | The internet of battle things: a survey on…

GitLab 国际站中国大陆等地区停服,如何将数据快速迁移到云效

代码托管平台 GitLab 国际站(GitLab.com)近日发布公告,官宣即将停止对中国大陆、香港、澳门地区的用户账号提供服务,并提供 60 天过渡期自行迁移账户数据,超期未迁移的账号可能会被 GitLab 清除。这一重要决策引起了全…

React方向:react中5种Dom的操作方式

1、通过原生JS获取Dom去操作 通过document.querySelector(#title)原生js的方式去拿到dom节点,然后去进行操作。 import {Component} from "react";class App extends Component {//定义获取Dom的函数handleGetDom(){let title document.querySelector(#t…

更灵活的对象之间的联动 - 观察者模式(Observer Pattern)

观察者模式(Observer Pattern) 观察者模式(Observer Pattern)观察者模式(Observer Pattern)概述观察者模式(Observer Pattern) 结构图观察者模式(Observer Pattern&#…

Webpack 5 混淆插件terser-webpack-plugin生命周期作用时机和使用注意事项

参考案例代码 海南酷森科技有限公司/webpack-simple-demo Terser(简要的/简短的) 混淆依据 混淆是发生在代码已经 bundle 之后的事情 变量或者函数在被引用或赋值时才能被混淆 孤立的函数或者变量可能会被移除,但不会被混淆,要…

‌OCP英文全称是什么

在数据库领域,OCP全称为Oracle Certified Professional,是Oracle公司提供的Oracle数据库中级认证,专门针对数据库管理员(Database Administrator,简称DBA)和数据库开发人员。以下是关于OCP认证的详细介绍: 认证领域与…

MyBatis实现数据库的CRUD

本文主要讲解使用MyBatis框架快速实现数据库中最常用的操作——CRUD。本文讲解的SQL语句都是MyBatis基于注解的方式定义的,相对简单。 Mybatis中#占位符和$拼接符的区别 “#”占位符 在使用MyBatis操作数据库的时候,可以直接使用如下SQL语句删除一条数…

微调神经机器翻译模型全流程

MBART: Multilingual Denoising Pre-training for Neural Machine Translation 模型下载 mBART 是一个基于序列到序列的去噪自编码器,使用 BART 目标在多种语言的大规模单语语料库上进行预训练。mBART 是首批通过去噪完整文本在多种语言上预训练序列到序列模型的方…

RTX 5090 加持,科研服务器如何颠覆 AI 深度学习构架?

RTX 5090作为英伟达旗舰级GPU,凭借Ada Lovelace架构,融合创新的SM多单元流处理器、第三代RT Core与第四代Tensor Core,打造出极为强劲的计算体系。其24GB GDDR6X显存搭配1TB/s带宽,能以极低延迟和超高吞吐量处理大规模张量数据&am…

【2025最新】机器学习类计算机毕设选题80套,适合大数据,人工智能

【2025最新】机器学习类型计算机毕设选题 1-10套 基于Spring Boot的物流管理系统的设计与实现 基于机器学习的虚假招聘信息的分析与预测 基于机器学习的影响数据科学家职业变动因素的分析与预测 基于Spring Boot的历史文物交流平台的设计与实现 基于机器学习的肥胖影响因素的分…

【PPTist】幻灯片放映

放映功能的代码都在 src/hooks/useScreening.ts,我们看一下 从当前页开始 放映的功能。 // 进入放映状态(从当前页开始) const enterScreening () > {enterFullscreen()screenStore.setScreening(true) }首先是 enterFullscreen()&#…

MySQL 16 章——变量、流程控制和游标

一、变量 在MySQL数据库的存储过程和存储函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据 在MySQL数据库中,变量分为系统变量和用户自定义变量 (1)系统变量 1.1.1系统变量分类 变量由…

T-SQL编程

目录 1、T-SQL的元素 1.1 标识符 1. 常规标识符 2. 分隔标识符 1.2 变量 1. 全局变量 2. 局部变量 1.3 运算符 1. 算数运算符 2. 赋值运算符 3. 位运算符 4. 比较运算符 5. 逻辑运算符 6. 字符串连接运算符 7. 一元运算符 8. 运算符的优先级和结合性 1.4 批处…

2024 China Collegiate Programming Contest (CCPC) Zhengzhou Onsite 基础题题解

L. Z-order Curve 思路:这题目说了,上面那一行,只有在偶数位才有可能存在1,那么一定存在这样的数,0 ,1,100, 10000,那么反之,我们的数列是行的二倍,因此会出现10,1000,100000这样的数&#xff0…

Unity2D初级背包设计后篇 拓展举例与不足分析

Unity2D初级背包设计中篇 MVC分层撰写(万字详解)-CSDN博客、 如果你已经搞懂了中篇,那么对这个背包的拓展将极为简单,我就在这里举个例子吧 目录 1.添加物品描述信息 2.拓展思路与不足分析 1.没有删除只有丢弃功能,所以可以添加垃圾桶 2.格…

vue(七) vue进阶

目录 第一课:Vue方法、计算机属性及侦听器 一、数组变化侦测 方法1:变更方法 方法2:替换一个数组 例子:小Demo:合并两个数组 二、计算属性 1.基础(不推荐) 2.使用计算属性来完成案例 3.使用函数的方…

Spring Boot 2 学习指南与资料分享

Spring Boot 2 学习资料 Spring Boot 2 学习资料 Spring Boot 2 学习资料 在当今竞争激烈的 Java 后端开发领域,Spring Boot 2 凭借其卓越的特性,为开发者们开辟了一条高效、便捷的开发之路。如果你渴望深入学习 Spring Boot 2,以下这份精心…

YangQG 面试题汇总

一、交叉链表 问题: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 解题思想: 双指针 备注:不是快慢指针,如果两个长度相…

fastapi 使用

参考: https://fastapi.tiangolo.com/zh/tutorial/first-steps/https://fastapi.tiangolo.com/zh/tutorial/first-steps/ FastAPI 用于基于标准 Python 类型提示使用 Python 构建 API,使用 ASGI 的标准来构建 Python Web 框架和服务器。所有简单理解&a…