DWH中增量数据的抽取
1. Truncate-Load 全量加载
简单直观、不易出错,适合数据量不太大的操作
性能问题
2. Increamental-Load 只考虑新增、修改、删除的记录
良好的数据源设计(主要是标识列)可能直接就给后续的增量处理提供了最直接的判断依据
1) 只有insert操作
表中的数据是不可逆的比如删除或者修改,一般会提供一列能够记载这条记录生成时间或者ID增长的列
处理策略:第一次加载动作完成之后,记录一下最大的时间点,保存到一个加载记录表中;
从第二次加载开始先比较上次操作保存的最后/最大的时间点,只加载这个时间点以后的数据;
当加载过程全部成功完成之后再更新加载记录表,更新这次最后的时间点。
2) 有修改时间特征的表
创建时会用CreateDate标记,更新的时候用UpdateDate标记,当CreateDate和UpdateDate相同的时候说明这一条数据是插入操作
处理策略:第一次加载动作完成以后,记录一下最大的 UpdateDate 时间戳,保存到一个加载记录表中
在第二次加载数据的时候,用加载记录表中的时间戳与源表里的 UpdateDate 相比较,比时间戳大的说明是新添加的或者修改的数据
当整个加载过程成功之后,更新最大的 UpdateDate到记录表中
如果插入数据的时候只会写入 CreateDate,但是并不会写入UpdateDate,这样的话在每次加载的过程中可能就需要同时比较CreateDate和UpdateDate了
UpdateDate is null--表示new insert和not update的数据,UpdateDate is not null--表示new update和old update的数据(需要用一张表记录最大的createDate和UpdateDate的时间)
3) 编辑信息无时间\ID特征的表
表本身只保留基本信息,所有的编辑操作等信息专门有一张表来记录,单独记载所有的编辑历史信息。这种表好处是主要信息独立,查询主表时查询体积小而提高查询效率。
处理策略:要关联 Member Audit History 表并进行时间戳或者自增长ID的判断,参照1)和2)的设计方案
4) 无特征数据表
没有明显的update、insert标识列
处理的策略:基于主键或者唯一列到目标表中查询是否存在,不存在就插入,如果存在就比较关键列数据是否相等,不相等就修改
考虑使用SQL Merge或者SSIS的Lookup + Conditional Split实现
--merge
MERGE INTO @TargetTable AS T
USING @SourceTable AS S
ON T.ID = S.ID
WHEN MATCHED THEN
UPDATE SET T.DSPT = S.DSPT
WHEN NOT MATCHED BY TARGET THEN INSERT VALUES(S.ID, S.DSPT)
WHEN NOT MATCHED BY SOURCE THEN DELETE
OUTPUT $ACTION AS ACTION,
Deleted.ID AS 'Deleted ID',
Deleted.DSPT AS 'Deleted Description',
Inserted.ID AS 'Inserted ID',
Inserted.DSPT AS 'Inserted Description'
INTO @Log;
3. Source---Staging---PROD
source-->staging: 主要是增量数据处理
staging表可以全清空,再从数据源中加载
fact表考虑使用增量,保证在 Staging 事实中的数据相对于后面的PROD数据库来说就是新增的或者已修改过的数据
staging-->PROD: 主要是Dim和Fact的ETL处理
维度SCD过程,事实表的Lookup过程
4. 加载失败的情况的应对
1) SSIS过程处理日志和错误日志
在SSIS Package执行的时候,写执行过程到processLog中,ExecutionStatus和eventHandler的信息
2) 设置checkpoint,跳过上一次已经成功执行过一些步骤而直接从失败的地方重新开始执行
启用checkPoint--空白处右键-属性,设置saveCheckPoint=true;
checkPointUsage=IfExists; 如果检查文件不存在将从头开始执行 CheckpointUsage=Always检查文件将必须存在
checkpointFileName=filepath; 一个包将只有一个检查文件
最后在包的各种task上都设置checkPoint,并将FailPackageOnFailure设置为true
Checkpoint只支持到Control Flow Task这一层,而不会支持Data Flow这一层; 循环组件,检查点不会记录循环中的状态
如果设置TransactionOption = Required的话,将不允许使用 Checkpoints 这一机制
3) CheckPoint执行过程解析--http://www.cnblogs.com/biwork/p/3366724.html
DWH中增量数据的抽取的更多相关文章
- ETL中的数据增量抽取机制
ETL中的数据增量抽取机制 ( 增量抽取是数据仓库ETL(extraction,transformation,loading,数据的抽取.转换和装载)实施过程中需要重点考虑的问 题.在ETL过 ...
- ODI利用goldengate实现增量数据捕获
ODI利用goldengate实现增量数据捕获 上个月,Oracle发布了ODI的最新版本10.1.3.6_02,其中增加了针对采用goldengate获取源数据库增量变化的知识模块,这样当系统需要实 ...
- Canal:同步mysql增量数据工具,一篇详解核心知识点
老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...
- Web网页中动态数据区域的识别与抽取 Dynamical Data Regions Identification and Extraction in Web Pages
Web网页中动态数据区域的识别与抽取 Dynamical Data Regions Identification and Extraction in Web Pages Web网页中动态数据区域的识别 ...
- Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)
目录 1 加入数据导入处理器的jar包 2 加入数据库驱动包 3 配置solrconfig.xml文件 3.1 配置lib标签 - 加入驱动jar包 3.2 配置requestHandler标签 - ...
- XPatchLib 对象增量数据序列化及反序列化器 For .Net
在日常的软件开发和使用过程中,我们发现同一套系统的同一配置项在不同的客户环境中是存在各种各样的差异的.在差异较为分散时,如何较好的管理这些差异,使得维护过程能够更加安全和快速,一直在这样那样的困扰着开 ...
- 如何实现Qlikview的增量数据加载
笔者备注: 刚刚接错Qlikview,上网搜集的资料,如何处理增量数据. 1 寻找增量时间戳(1)各种数据库:表的创建时间字段和修改时间字段或者最后的修改时间字段:(2)sql server:可以用找 ...
- Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据
Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据 PRM 全称为ParnassusData Recovery Manager ,由 诗檀软 ...
- 8.HBase In Action 第一章-HBase简介(1.2.2 捕获增量数据)
Data often trickles in and is added to an existing data store for further usage, such as analytics, ...
随机推荐
- 7.Git分支-分支简介、分支创建、分支切换
1.分支简介 几乎所有的版本控制系统都支持某种形式的分支.使用分支意味着可以把你的工作从开发主线上分离开来,以免影响开发主线.Git的分支是其必杀技,它相对于其它版本控制系统来说,具有难以置信的轻量性 ...
- Guava 源码分析(Cache 原理 对象引用、事件回调)
前言 在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache 的相关原理. 文末提到了回收机制.移除时间通知等内容,许多朋友也挺感兴趣,这次就这两个内容再来分析分析. 在开 ...
- Spring Security构建Rest服务-1300-Spring Security OAuth开发APP认证框架之JWT实现单点登录
基于JWT实现SSO 在淘宝( https://www.taobao.com )上点击登录,已经跳到了 https://login.taobao.com,这是又一个服务器.只要在淘宝登录了,就能直接访 ...
- Steeltoe之Distributed Tracing篇
Steeltoe里的分布式追踪功能与Spring Cloud Sleuth一样,支持在日志中记录追踪数据,或者上传到远端的服务,比如Zipkin. Logging 在Steeltoe中使用日志时需要引 ...
- Zend与PHP之间到底是什么关系
Zend与PHP之间是什么关系 What is Zend's relationship with PHP? 每次看到PHP虚拟机中出现zend.zendvar之类的都很困惑,特意查了一下... PHP ...
- SRS-开源流媒体服务器
SRS 简介 SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码.SRS提供了丰富的接入方案将RTMP流接入SRS, 包括推送RTMP到SRS.推送RTSP/UDP/FL ...
- Redis【入门】就这一篇!
Redis 概述 在我们日常的Java Web开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一 ...
- 克拉克拉(KilaKila):大规模实时计算平台架构实战
克拉克拉(KilaKila):大规模实时计算平台架构实战 一.产品背景:克拉克拉(KilaKila)是国内专注二次元.主打年轻用户的娱乐互动内容社区软件.KilaKila推出互动语音直播.短视频配音. ...
- ES6 系列之 Babel 是如何编译 Class 的(下)
前言 ES5 寄生组合式继承 function Parent (name) { this.name = name; } Parent.prototype.getName = function () { ...
- python实战学习之matplotlib绘图续
学习完matplotlib绘图可以设置的属性,还需要学习一下除了折线图以外其他类型的图如直方图,条形图,散点图等,matplotlib还支持更多的图,具体细节可以参考官方文档:https://matp ...