【大数据】常见的数据抽取方法

常见的数据抽取方法

  • 1.基于查询式的数据抽取
    • 1.1 触发器方式(又称快照式)
    • 1.2 增量字段方式
    • 1.3 时间戳方式
    • 1.4 全表删除插入方式
  • 2.基于日志的数据抽取

数据抽取 是指从源数据源系统抽取需要的数据。实际应用中,数据源较多采用的是关系数据库。总体而言,数据抽取的常见方法有两大类,一是基于查询式的,一是基于日志的。

1.基于查询式的数据抽取

基于查询式的数据抽取,顾名思义,以从来源库来源表查询数据为主。总体又有几种:触发器方式,增量字段方式,时间戳方式等等。

1.1 触发器方式(又称快照式)

在要抽取的表上建立需要的触发器,一般要建立插入、修改、删除三个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个临时表,抽取线程从临时表中抽取数据,临时表中抽取过的数据 被标记或删除

  • 优点:数据抽取的性能高,ETL 加载规则简单,速度快,不需要修改业务系统表结构,可以实现数据的递增加载。
  • 缺点:要求业务表建立触发器,对业务系统有一定的影响,容易对源数据库构成威胁。

1.2 增量字段方式

它是一种基于快照比较的变化数据捕获方式,在源表上含有一个增量字段,系统中更新修改表数据的时候,同时修改增量字段的值。当进行数据抽取时,通过比较上次抽取时记录的增量字段值来决定抽取哪些数据。严格意义上讲,增量字段要求必须递增且唯一

  • 优点:数据抽取的性能高,ETL 加载规则简单,速度快,不需要修改业务系统表结构,可以实现数据的递增加载。
  • 缺点:增量字段必须递增且唯一。对不支持增量字段的自动更新的数据库,需要业务系统来维护。另外,无法捕获对增量字段以前数据的 deleteupdate 操作,在数据准确性上受到了一定的限制。无法获取 delete 及分别出 insertupdate

1.3 时间戳方式

放宽松条件的增量字段方式,不要求字段唯一,满足递增即可。在源表上含有一个 时间戳字段,系统中更新修改表数据的时候,同时修改增量字段的值。当进行数据抽取时,通过比较上次抽取时间与时间戳字段的值来决定抽取哪些数据。有的数据库的时间戳支持自动更新,即表的其它字段的数据发生改变时,自动更新时间戳字段的值。有的数据库不支持时间戳的自动更新,这就要求业务系统在更新业务数据时,手工更新时间戳字段。

  • 优点:数据抽取的性能高,ETL 加载规则简单,速度快,不需要修改业务系统表结构,可以实现数据的递增加载。
  • 缺点:对不支持时间戳字段的自动更新的数据库,需要业务系统来维护,业务系统复杂的情况下有可能无法保证时间戳的递增性。另外,无法捕获对增量字段以前数据的 deleteupdate 操作,在数据准确性上受到了一定的限制。在一次抽取过程中如果数据量大,时间戳字段相同值较多,分页查询抽取时可能会丢失数据(order by 顺序不定导致)。

1.4 全表删除插入方式

每次 ETL 操作均删除目标表数据,由 ETL 全新加载数据。

  • 优点:ETL 加载规则简单。
  • 缺点:不适合大表,不可以实现数据的递增加载,如果有关联关系,需要重新进行创建。

2.基于日志的数据抽取

数据库通常借助日志来实现事务,常见的有 undo logredo logundo log / redo log 都能保证事务特性,这里主要是原子性和持久性,即事务相关的操作,要么全做,要么不做,并且修改的数据能得到持久化。

我们通过采集日志把已经 commit 的事务数据抽取出来,对于没有 commit 的事务不做操作,进而达到数据抽取的目的。

  • 优点:不需要修改业务系统表结构,数据完整准确(insert / update / delete),支持事务。
  • 缺点:环境配置复杂,需要占用数据库系统的一定资源,ETL 规则复杂(采集、解析)。

比如说常见的 MySQL 的 binlog 日志同步,Oracle 使用自带的 LogMiner 工具解析归档日志等等。

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

多目标优化中的“latent action”是什么?

2020 NeurIPS 中的“latent action”: Our model defines latent action as a boundary that splits the region represented by a node into a high-performing and a low performing region. 这里的latent action代表一个边界(分类器)&…

node教程(五)接口+会话

文章目录 一.接口1.1接口是什么?1.2接口的作用1.3接口的开发与调用1.4接口的组成 一.接口 1.1接口是什么? 接口是前后端通信的桥梁 1.2接口的作用 实现前后端通信 1.3接口的开发与调用 大多数接口都是由后端工程师开发的,开发语言不限 一般情况下接口都是由…

MES 与ERP 什么时候能上

中小制造企业数字化转型升级近几年被炒得如火如荼,各种政策的支持、补贴和会议活动的举办,都在给中小制造企业管理者洗脑,一定要数字化升级,否则就被市场淘汰。 中小制造企业其实是弱势群体,向上需要维护好客户&#…

javaSE学习笔记-未完

目录 前言 一、java基础 1.1概述 1.java语言发展史 2.Java语言版本 3.Java语言平台 4.Java语言特点 5.Java语言跨平台原理-可移植性 6.JRE和JDK的概述 7.JDK的下载和安装 8.JDK安装路径下的目录解释 9.path环境变量的作用及配置方式 10.classpath环境变量的作用及…

二、GRE VPN

GRE VPN 1、GRE介绍2、GRE基本原理3、GRE报文格式4、报文在GRE中传输过程5、价值6、Keepalive检测7、GRE应用8、配置GRE隧道8.1、配置绑定GRE协议的接口8.2、配置Tunnel接口8.3、配置Tunnel路由 9、GRE配置举例9.1、GRE静态路由示例9.1.1、路由器运行动态路由协议实现互通9.1.2…

网络资料(忘传了)

1网络分层模型和应用协议 1.1分层模型 1.1.1分层的意义 当遇到一个复杂问题的时候,可以使用分层的思想把问题简单化 比如,你有半杯82年的可乐,想分享给你的朋友王富贵,但你们已经10年没有联系了。要完成这件事,你可…

Redis-使用java代码操作Redis

目录 一.Java连接上redis 1.导入依赖 二.Java操作redis的常见类型数据存储 1.设置值 ​编辑 2.哈希 1.1设置哈希值 ​编辑 1.2.封装工具类 1.3列表 三redis中的项目应用 一.Java连接上redis redis与Mysql都市数据库,Java操作redis其实跟操作mysql的过程是一…

Selenium —— 网页frame与多窗口处理!

一、多窗口处理. 1.1、多窗口简介 点击某些链接,会重新打开⼀个窗⼜,对于这种情况,想在新页⾯上操作,就 得先切换窗⼜了。 获取窗⼜的唯⼀标识⽤句柄表⽰,所以只需要切换句柄,就可以在多个页⾯灵 活操作了…

基于EPICS stream模块的直流电源的IOC控制程序实例

本实例程序实现了对优利德UDP6720系列直流电源的网络控制和访问,先在此介绍这个项目中使用的硬件: 1、UDP6721直流电源:受控设备 2、moxa串口服务器5150:将UDP6721直流电源设备串口连接转成网络连接 3、香橙派Zero3:运…

【iOS】知乎日报前三周总结

这几天一直在进行知乎日报的仿写,仿写过程中积累了许多实用的开发经验,并对MVC有了更深的了解,特撰此篇作以总结 目录 第一周将网络请求封装在一个单例类Manager中SDWebImage库的简单使用运用时间戳处理当前时间自定义NavigationBar 第二周在…

HarmonyOS(二)—— 初识ArkTS开发语言(中)之ArkTS的由来和演进

前言 在上一篇文章HarmonyOS(二)—— 初识ArkTS开发语言(上)之TypeScript入门,我初识了TypeScript相关知识点,也知道ArkTS是华为基于TypeScript发展演化而来。 从最初的基础的逻辑交互能力,到…

VScode配置 github 上传代码

初始化,设置用户名和密码 # 设置你的 Git 用户名 git config --global user.name author# 设置你的 Git 邮箱 git config --global user.email authorgmail.com# 确保 Git 输出带有颜色 git config --global color.ui auto​# 查看 Git 配置 git list1. 初始化本地…

Java8实战-总结46

Java8实战-总结46 CompletableFuture:组合式异步编程让代码免受阻塞之苦使用 CompletableFuture 发起异步请求寻找更好的方案 CompletableFuture:组合式异步编程 让代码免受阻塞之苦 使用 CompletableFuture 发起异步请求 可以使用工厂方法supplyAsyn…

数据包端到端的流程

流程 A给F发送一个数据包的流程: 首先 A(192.168.0.1)通过子网掩码(255.255.255.0)计算出自己与 F(192.168.2.2)并不在同一个子网内,于是决定发送给默认网关(192.168.0.…

vue3项目实践

创建 vue3 项目 node本版:node 16.x.x, 脚手架:create-vue 脚手架工具,底层vite 创建vue3项目:npm init vuelatest setup函数 vue3 单文件组件 1、vite.config.js配置文件基于vite的配置 2、template模板不再要求唯…

4 函数的升级-下

重载(overload) 同一个标识符在不同的上下文有不同的意义 如汉语中“洗”和不同的字搭配后,有不同的含义,play 和不同的单词搭配后有不同的含义。 函数重载:用同一个函数名定义不同的函数,通过不同的参数搭…

c++11中的线程库和包装器

c11 1. 线程库1.1 线程库1.2 锁mutex 2. 包装器2.1 funciton2.2 bind 1. 线程库 1.1 线程库 C11中的线程库提供了一种方便的方式来创建和管理线程。其中,std::thread是一个重要的类,它允许我们创建新线程并控制它们的执行。以下是std::thread的一些重要…

048基于web+springboot的校园资料分享平台

欢迎大家关注,一起好好学习,天天向上 文章目录 一项目简介技术介绍 二、功能组成三、效果图四、 文章目录 一项目简介 本校园资料分享平台有管理员和用户两个角色。管理员功能有个人中心,学生管理,资料分享管理,资源分…

03、SpringBoot + 微信支付 ---- 创建订单、保存二维码url、显示订单列表

目录 Native 下单1、创建课程订单保存到数据库1-1:需求:1-2:代码:1-3:测试结果: 2、保存支付二维码的url2-1:需求:2-2:代码:2-3:测试:…

[python 刷题] 1248 Count Number of Nice Subarrays

[python 刷题] 1248 Count Number of Nice Subarrays 题目如下: Given an array of integers nums and an integer k. A continuous subarray is called nice if there are k odd numbers on it. Return the number of nice sub-arrays. 这道题和 1343 Number of S…