Package设计2:增量更新
SSIS 设计系列:
一般来说,ETL实现增量更新的方式有两种,第一种:记录字段的最大值,如果数据源中存在持续增加的数据列,记录上次处理的数据集中,该列的最大值;第二种是,保存HashValue,快速检查所有数据,发现异动的数据之后,只同步更新被修改的数据。
1,字段的最大值
记录字段的最大值,使用DateTime记录源数据上次更新的时间,或使用TimeStamp或RowVersion记录上次更新的数值
一般情况下,DBA在设计表时,都会在表中创建LastUpdatedTime字段,数据类型是DateTime 或 DateTime2(7),用于记录数据更新的时间。使用DateTime记录上次更新的时间,要求对数据源进行Update或Insert操作时,都要更新LastUpdatedTime字段为当前的时间值。
如果创建TimeStamp或RowVersion类型的字段,那么对数据进行Update或Insert修改时,系统会负责维护该字段,保证其值持续增加。
使用这种方式的特点是,对Table中的任意一个column进行Update,都会更新参照值。如果源系统有部分column没有导入ETL,而源系统却频繁更新这些column,那么会导致ETL每次加载的数据,并不是“更新”的数据。
2,使用Hash值
保存HashValue,使用CheckSum或Binary_checksum获取HashValue,对更新的数据进行同步操作
如果Table中没有持续增加的Column,那么记录字段最后一次更新的值,将是不可行的。此时,可以使用CheckSum或Binary_checksum等Hash函数快速检查源数据,并将HashValue保存到一个HashTable中(该HashTable有三列:业务键,HashValue,SyncStatus)。如果一个数据行的HashValue 和 HashTable中记录的HashValue 有出入,说明该数据行发生变化。
使用这种方式的特点是:每次都要对数据源进行全部扫描,获取HashValue;比较HashValue,只对异动的数据进行数据同步。由于对源数据进行全部的扫描 和 Hash隐射都会消耗时间,在使用这种方式之前,需要多做测试,监控IO,CPU 和 内存的使用情况。
注意:只对ETL需要的Columns进行Hash 映射,保存HashValue。即使源Table的其他columns发生update,ETL也不会认定该数据行发生变化。
3,使用HashValue,分批导入
使用HashValue,将源数据分批导入ETL进行处理
如果对源数据的处理非常耗时,那么可以将源数据分批导入ETL,增加数据处理的并行度,以减少ETL的执行时间。
HashTable有三列:业务键,HashValue,SyncStatus,用以记录上次更新时源数据的HashValue
Step1,扫描源数据,获取HashValue,对于同一个数据行,如果当前的HashValue跟HashTable中记录的HashValue不同,那么设置SyncStatus=0;ETL要处理的全部数据,其SyncStatus=0。
Step2,将处理流程复制为N个Batch,将HashValue/N=0,1,2,,,N-1的数据分别引入对应的N个Batch中,这样,N个batch会同时处理不同的数据。在每个Batch处理完成之后,都会设置SyncStatus=1;
Optional Step3,在一个Batch中,可以使用一个循环,每次只处理 M条数据,并将处理过的数据的SyncStatus设置为1。例如,在10号Batch中,一次循环只处理200条数据,那么这200条数据的特点是:SyncStatus=0,HashValue/N=9。
使用这种设计的场景是:处理数据的Task非常耗时,由于Task是同步的,一个Task在将数据处理完成之前,下游Task必须等待,因此,可以将数据集分为多个不重复的子集同时处理,各个Task都在执行数据处理,提高数据处理的并发度,减少ETL的整体时间。
Package设计2:增量更新的更多相关文章
- **app后端设计(10)--数据增量更新(省流量)
在新浪微博的app中,从别的页面进入主页,在没有网络的情况下,首页中的已经收到的微博还是能显示的,这显然是把相关的数据存储在app本地. 使用数据的app本地存储,能减少网络的流量,同时极大提高了用户 ...
- app后端设计(10)--数据增量更新
在新浪微博的app中,从别的页面进入主页,在没有网络的情况下,首页中的已经收到的微博还是能显示的,这显然是把相关的数据存储在app本地. 使用数据的app本地存储,能减少网络的流量,同时极大提高了用户 ...
- Package 设计3:数据源的提取和使用暂存
SSIS 设计系列: Package设计1:选择数据类型.暂存数据和并发 Package设计2:增量更新 Package 设计3:数据源的提取和使用暂存 在使用SSIS Package处理海量数据时, ...
- Package设计1:选择数据类型、暂存数据和并发
SSIS 设计系列: Package设计1:选择数据类型.暂存数据和并发 Package设计2:增量更新 Package 设计3:数据源的提取和使用暂存 一,数据类型的选择 对于SSIS的数据类型,容 ...
- 前端遇上Go: 静态资源增量更新的新实践
前端遇上Go: 静态资源增量更新的新实践https://mp.weixin.qq.com/s/hCqQW1F8FngPPGZAisAWUg 前端遇上Go: 静态资源增量更新的新实践 原创: 洋河 美团 ...
- 谈谈混合 App Web 资源的打包与增量更新
综述 移动 App 的运行环境具有带宽不稳定,流量收费,启动速度比较重要等特点,所以混合 App 如何加载 Web 资源并不是一个新问题.本文目的是总结出一种资源打包下载的思路和方案,并且提供一种打包 ...
- SSIS Design2:增量更新
一般来说,ETL实现增量更新的方式有两种,第一种:记录字段的最大值,如果数据源中存在持续增加的数据列,记录上次处理的数据集中,该列的最大值:第二种是,保存HashValue,快速检查所有数据,发现异动 ...
- Kettle中通过触发器方式实现数据 增量更新
在使用Kettle进行数据同步的时候, 共有 1.使用时间戳进行数据增量更新 2.使用数据库日志进行数据增量更新 3.使用触发器+快照表 进行数据增量更新 今天要介绍的是第3中方法. 实验的思路是这样 ...
- 测试Kettle在增量更新的时候是否支持级联——不支持(基于mysql)
由于LZ很像整理一下如何使用Kettle对一张表进行增量更新的时候, 同时实现对数据库中的其他表也可以实现相关的更新操作. 第一种方法想使用触发器,即在相应的hop之间添加SQL脚本step然后在st ...
随机推荐
- Unity调用安卓中的方法遇到的问题
最近在用U3D做一个简单的迷宫游戏,在项目中利用Unity制作游戏场景,在android中调用游戏场景,并在游戏结束后调用安卓方法,传递参数,退出游戏场景 查找网上资料,基本上Unity调用安卓的写法 ...
- Aria2 无限制下载神器
Aria2 是一款免费开源跨平台且不限速的多线程下载软件,Aria2的优点是速度快.体积小.资源占用少:支持 HTTP / FTP / BT / Magnet 磁力链接等类型的文件下载:支持 Win. ...
- 囧啊!!时间戳转化为时间出错php
最近写了一个api,测试也没发现啥问题.可是上线之后发现有时api的返回结果不正确.为什么呢? 调我接口的同学给了两个调用示例,理论上两个的结果应该一致,实际结果却不一致. api调用带了一个时间戳参 ...
- spring中MessageSource的配置使用方法3--ResourceBundleMessageSource【转】
本文转载仅供自己学习收录,不做任何商业用途,如有需要请访问原地址:http://blog.csdn.net/qyf_5445/article/details/8124431 ApplicationCo ...
- configuration on ubuntu server
1.network configuration 1.1 static ip sudo vi /etc/network/interfaces auto eth0 iface eth0 inet stat ...
- springmvc入门之HelloWorld篇
springmvc是一个基于spring的mvc框架,各种优点啥的用过就知道了.下面开始讲HelloWorldController的实现. 1.开发环境搭建<导jar包+配置文件> 1.1 ...
- jQuery实现滚动时动态加载页面内容
有些网站的网页内容不是一次性加载完毕的,而是在鼠标向下滚动时动态加载的,这是怎么做到的呢?看下面代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
- 在jupyter notebook中运行R语言
要想在jupyter notebook中运行R语言其实非常简单,按顺序安装下面扩展包即可: install.package('repr','IRdisplay','evaluate','crayon' ...
- BZOJ4802:欧拉函数(Pollard-Rho,欧拉函数)
Description 已知N,求phi(N) Input 正整数N.N<=10^18 Output 输出phi(N) Sample Input 8 Sample Output 4 Soluti ...
- 【openjudge】【前缀和】P6731啤酒厂选址
[描述] 海上有一个岛,在环海边上建有一条环岛高速公路,沿着公路有n(5 < n < 10000)个居民点,假设每个居民点有一个编号,从0开始,按顺时针依次从小到大(即,0,1,…,n-1 ...