惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
博客园 - Franky
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿
博客园 - 司徒正美
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
博客园_首页
S
SegmentFault 最新的问题
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
H
Help Net Security
MongoDB | Blog
MongoDB | Blog

任霏博客

我将关闭服务器:AI彻底掐死了奄奄一息的个人博客 - 博客文章 - 任霏的个人博客网站 Vibe Coding 实现本地模型 Token 自由 IntelliJ IDEA + LM Studio + LM Link + Continue - 博客文章 - 任霏的个人博客网站 1Password涨价后,别急着退订1Password,这个操作能帮你省25% - 博客文章 - 任霏的个人博客网站 我,吃饱了撑的注册了个域名,Cloudflare账号没了,不建议将域名放在Cloudflare - 博客文章 - 任霏的个人博客网站 临时邮箱:保护隐私与免骚扰的新方式 - 博客文章 - 任霏的个人博客网站 价值4100万美元SOL被盗SwissBorg在Solana上遭遇安全事件超200万枚ETH排队退出质押 - 博客文章 - 任霏的个人博客网站 注意 Web3 钱包遭遇 NPM 超大规模供应链攻击投毒事件 - 博客文章 - 任霏的个人博客网站 我受到以太坊ERC-20假代币地址投毒攻击记录一下大家谨防上当受骗 - 博客文章 - 任霏的个人博客网站 在2025年使用显卡 NVIDIA RTX 2080 Ti 挖矿收益记录和分析还能不能挖矿 - 博客文章 - 任霏的个人博客网站 分享我是如何成功戒烟的经验(包含失败的经验) - 博客文章 - 任霏的个人博客网站 在 OpenWRT 中配置 PassWall2 插件的教程记录 - 博客文章 - 任霏的个人博客网站 Office Professional Plus 2019 VL 版下载与 KMS 激活 - 博客文章 - 任霏的个人博客网站 最近几天我的 CDN 流量受到来自电信[山东烟台]、[江苏扬州]两地家庭宽带的攻击 - 博客文章 - 任霏的个人博客网站 自建AI服务器使用PVE配置显卡直通虚拟机安装驱动、CUDA和cuDNN运行LLM大模型进行AI炼丹 - 博客文章 - 任霏的个人博客网站 各代英特尔Intel芯片组主板适配兼容的CPU和DDR内存数据统计 - 博客文章 - 任霏的个人博客网站 GitLab Global 国际站将在60天内删除中国大陆、香港、澳门地区的账号 - 博客文章 - 任霏的个人博客网站 Github Copilot Free 开放免费版所有人均可使用 OpenAI GPT-4o、Anthropic Claude 3.5 AI 代码生成服务 - 博客文章 - 任霏的个人博客网站 Cloudflare 更新了订阅协议明确禁止优选IP和搭建梯子的行为 - 博客文章 - 任霏的个人博客网站 Linux(systemd)手动离线安装二进制(binary)MairaDB数据库指定版本 - 博客文章 - 任霏的个人博客网站 流程引擎 Flowable/Activiti 无法启动报错:liquibase - Waiting for changelog lock.... - 博客文章 - 任霏的个人博客网站 Spring Boot 全局异常捕获 ControllerAdvice 无法捕获 过滤器(Filter)和拦截器(Interceptor)中的异常 - 博客文章 - 任霏的个人博客网站 Freenom 收回了全部免费域名(.tk/.cf/.gq/.ga/.ml) - 博客文章 - 任霏的个人博客网站 Alibaba Druid 数据库连接池 takeLast() AQS 死锁导致程序无响应 - 博客文章 - 任霏的个人博客网站 你的网站加入 HSTS preload 预加载列表了吗 - 博客文章 - 任霏的个人博客网站 我的博客网站接入使用 Cloudflare 的架构分享 - 博客文章 - 任霏的个人博客网站 在 Ubuntu 上的 Nginx 高并发配置实践 - 博客文章 - 任霏的个人博客网站 技术分析黑客敲诈勒索站长的新手法百度对此也无能为力 - 博客文章 - 任霏的个人博客网站 百度站长平台快速收录权限和sitemap提交权限被全部收回 - 博客文章 - 任霏的个人博客网站 极狐 GitLab 免费时代结束不升级付费账号将禁止登陆 - 博客文章 - 任霏的个人博客网站 免费.ml域名10年委托合同到期被马里共和国收回域名经营权 - 博客文章 - 任霏的个人博客网站
大数据ETL技术中的数据抽取方法 - 博客文章 - 任霏的个人博客...
任霏 · 2021-01-04 · via 任霏博客

关于更正:《关于更正《大数据ETL技术中的数据抽取方法》

补充更新:《大数据ETL技术中对数据进行局部哈希对比优化对比速度

说到大数据仓库技术,不得不提ETL,ETL一词较常用在数据仓库,但其对象并不限于数据仓库。可以说是非常重要的一个环节,简单介绍一下ETL数据抽取比对的方法。

ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。

全量抽取

全量抽取就是完整复制,比较简单,没有什么需要说的,大部分情况是增量同步。

增量抽取

增量抽取是指基于上次抽取以后,捕捉数据库中的新增、修改、删除的数据变化。在增量抽取时一般不允许影响业务系统的稳定性,所以不能进行锁表或大规模的数据查询。

触发器方案

在业务系统中建立插入、修改、删除三个触发器,每当数据变化时向临时表中添加数据,这样直接可以取到相应的变化量数据,但缺点是会对数据源系统造成侵入,影响数据源系统的性能。

时间戳方案

基于递增数据比较的增量数据捕获方式,在源表上增加一个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值,进行数据抽取时,通过比较系统时间与时间戳字段的值来决定抽取哪些数据。这个方案无法对比出被删除的数据,同时也对源系统有入侵性,因为要增加时间戳字段,并且要求数据修改的时候更新时间戳字段。

哈希(Hash)对比方案

这个方案是我接下来要重点说的,先看我画的一张图,然后慢慢解释各个节点都是怎么做的:

ETL数据比对流程图

首先获取要对比的时间窗口、对比的字段,注意一定要在同一的一个数据窗口范围内对比,否则是没有意义的,比较常见的是在时间维度上做统一的对比窗口,比如对比一天之内的数据。

然后分别向源数据端和目标端数据库发送一个SQL,取出主键(例如id)和对比字段们的Hash值,我们就可以得到在一个统一数据窗口内的双方主键和对比列的Hash伪列。

ETL读取配置

将得到的两个集合求各自的补集,CuB就是B的补集,CuA就是A的补集,也得出了双方的变化量,交集是没有发生变化的数据,可以丢弃了。

ETL计算数据哈希

计算得到双方的补集CuB和CuA以后,再使用主键去各自的数据源拉取真实的数据过来,注意下面的对比操作都是真实数据,而不是Hash伪列了。

ETL对比真实数据

利用业务维度中的主键,再求两个集合的补集和交集,注意这里使用的是业务维度中的唯一主键了(例如身份证号),不是上一步的数据库主键id了,一定要注意。这次求出的CuB就是B的补集,将来要在数据源B中新增的数据,CuA就是将来交给A新增的数据,还有个交集,这个交集就是冲突数据,说明两端数据不一致,需要根据用户设置或者交给用户决定,以哪一侧数据为准进行数据覆盖。

ETL拉取真实数据

那删除的数据怎么识别出来呢,其实在部署ETL工具之前,就需要先建立数据标准规范,也就是数据治理,里面就规定必须要有删除标记,更新标记。

日志方案

通过分析数据库自身的日志来判断变化的数据。Oracle的改变数据捕获(CDC,Changed Data Capture)技术是这方面的代表。CDC 特性是在Oracle9i数据库中引入的,能够帮助你识别从上次抽取之后发生变化的数据。利用CDC,在对源表进行insert、update或 delete等操作的同时就可以提取数据,并且变化的数据被保存在数据库的变化表中。这样就可以捕获发生变化的数据,然后利用数据库视图以一种可控的方式提供给目标系统。

没有数据治理的情况

在上面的三个方案中,我们都会要求数据源做相应的修改,比如增加触发器、增加时间戳、增加删除字段,但往往在现实中,很多数据源不允许我们修改他们的数据结构,或者不能配合我们做适配。

这种情况下,我们想要识别出数据的增删改,就需要在我们ETL工具内部建立一个镜像机制,也就是给数据源一个快照,然后对比上一次的快照,找出增删改的数据,这种方式虽然入侵性几乎为零,但带来的牺牲就是执行效率上的下降,毕竟需要大量数据的迁移,会影响原有系统的稳定性,而且也需要保存和管理镜像快照。实在没有办法的情况下只能牺牲效率使用这种方案。

设计图下载:ETL.pdf