一般来说,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,保存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,将源数据分批导入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的整体时间。

SSIS Design2:增量更新的更多相关文章

  1. SSIS 实例 从Ftp获取多个文件并对数据库进行增量更新。

    整个流程 Step 1 放置一个FTP Task 将远程文件复制到本地 建立FTP链接管理器后 Is LocalPatchVariable 设置为Ture 并创建一个变量设置本地路径 Operatio ...

  2. [译]Stairway to Integration Services Level 4 - 增量更新数据

    在本文中, 我们说下增量更新数据:即将数据源中更新了的数据替换掉目标表中对应的数据. 更新代码 操作之前我们先把目标表e (dbo.Contact). 的数据改掉 Use AdventureWorks ...

  3. Package设计2:增量更新

    SSIS 设计系列: Package设计1:选择数据类型.暂存数据和并发 Package设计2:增量更新 Package 设计3:数据源的提取和使用暂存 一般来说,ETL实现增量更新的方式有两种,第一 ...

  4. 谈谈混合 App Web 资源的打包与增量更新

    综述 移动 App 的运行环境具有带宽不稳定,流量收费,启动速度比较重要等特点,所以混合 App 如何加载 Web 资源并不是一个新问题.本文目的是总结出一种资源打包下载的思路和方案,并且提供一种打包 ...

  5. android studio增量更新

    一.概述 1.1 概念 增量更新即是通过比较 本机安装版本 和 想要安装版本 间的差异,产生一个差异安装包,不需要从官网下载并安装全量安装包,更不需要将本机已安装的版本下载,而仅仅只是安装此差异安装包 ...

  6. Android 增量更新(BSDiff / bspatch)

    Android 增量更新 BSDiff / bspatchhttp://www.daemonology.net/bsdiff/android的代码目录下 \external\bsdiff bsdiff ...

  7. 【转载】Unity 合理安排增量更新(热更新)

    原帖地址:由于我看到的那个网站发的这篇帖子很大可能是盗贴的,我就暂时不贴地址了.避免伤害原作者 原版写的有点乱,我个人修改整理了下. --------------------------------- ...

  8. Unity5 如何做资源管理和增量更新

    工具 Unity 中的资源来源有三个途径:一个是Unity自动打包资源,一个是Resources,一个是AssetBundle. Unity自动打包资源是指在Unity场景中直接使用到的资源会随着场景 ...

  9. [转载]BW增量更新的理解(时间戳)

    在BW中,存在两种数据抽取方式,完全更新与增量更新,完全更新是每次把截至到某个时间的数据全部抽取,增量抽取则只抽取上次和本次抽取之间更新的数据,很显然,增量抽取能够提高系统效率,根据SAP帮 助的说法 ...

随机推荐

  1. lamp

      Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立 的程序,但是因为常被放在一起使用,拥有了越来越高的 ...

  2. [转]WebPack 常用功能介绍

    概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...

  3. 关于handler 和 looper 的问题

    重新去学习回顾looper和handler ,还是需要重新认识这个经常使用的机制. 我首先是看任玉刚老师的书<android的开发艺术探索>的第十章. 里面一句话开始说出了我们大概的理解— ...

  4. MySQL学习笔记01_数据库基础知识

    01_1 mysql数据库启动与停止 以<管理员权限>启动cmd: 输入net stop mysql停止mysql服务: 输入net start mysql启动mysql服务: 输入mys ...

  5. tornado学习笔记11 Web应用中模板(Template)使用应用实践

    上一篇中(Web应用中模板的工作流程分析),已经分析了模板的渲染流程,以及相关参数获取及设置原理.这篇主要讲述模板在实际应用案例. 11.1 需求 根据用户输入的两次密码,判断两次密码是否一致,并将判 ...

  6. GADL配置编译

    GADL配置编译 文章1:Win7(32/64)VS2010配置编译GDAL环境(图文教程+亲测可用!) 转载:http://malagis.com/win7-vs2010-gdal.html 近的一 ...

  7. JAVA面试逻辑题1

    一.计算推理 烧香问题: 有两根不均匀分布的香,每一根烧完的时间都是一小时.用什么办法确定一段15分钟的时间? 解题步骤: 1.点燃第一根的两头,同时点燃第二根的一头: 2.等到第一根燃尽以后,再点燃 ...

  8. 编写base64图片文件

    base64编码代替css背景图片在网站上应用是很广泛的,例如:loading gif图片,天猫加载时那只猫等等. 因为base64图片可以减少http请求,所以我们经常会把不经常改动的,独立的,尺寸 ...

  9. ASP.NET Razor - html中使用if else

    参考: http://www.runoob.com/aspnet/razor-cs-loops.html <select id="task_isfirst" class=&q ...

  10. AmazeUI 框架知识点-布局和样式整理

    1.Amaze UI 将所有元素的盒模型设置为 border-box.这下好了,妈妈再也不用担心没计算好 padding.border 而使布局破相了. 2.Amaze UI 将浏览器的基准字号设置为 ...