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, ...
随机推荐
- Python内置函数(4)——ascii
英文文档: ascii(object) As repr(), return a string containing a printable representation of an object, b ...
- 又拍云 API 使用的那些小事
又拍云提供了丰富的 API 调用,为了减少用户在初次接入时可能会遇到的坑”,本文将对又拍云常用的 API 使用方法做个简单的梳理,力求让业务接入变得更简单,更高效. 目前我们的 API 主要有四大类, ...
- angularJS学习(二)
1.实现列表 思路: accessCtrl.js let AccessCtrl = function($scope, AlertService, DialogService, BigDataServi ...
- Curl 请求数据多’1‘
今天做curl请求时遇到一个问题 数据请求回来,无缘无故多了1 加上这一行代码就就可以了:curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
- Unity 本地坐标到世界坐标,世界坐标到本地坐标
世界=>本地 public GameObject mTarget; public GameObject mPar; //这个注意一定要是mTarget的第一父物体. // Use this fo ...
- 华为oj之质数因子
题目: 质数因子 热度指数:5143 时间限制:1秒 空间限制:32768K 本题知识点: 排序 题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 ...
- WebSocket刨根问底(四)之五子棋大战江湖
有暇,做了个五子棋大战的小游戏送给各位小伙伴! 用到的知识点有: 1.JavaWeb基础知识(懂jsp,servlet足够) 2.JavaScript和jQuery基本用法 3.了解WebSocket ...
- 关于HotSpot VM以及Java语言的动态编译 你可能想知道这些
目录 1 HotSpot VM的历史 2 HotSpot VM 概述 2.1 编译器 2.2 解释器 2.3 解释型语言 VS 编译型语言 3 动态编译 3.1 什么是动态编译 3.2 HotSpot ...
- Solr 01 - 什么是Solr + Solr安装包目录结构说明
目录 1 Solr概述 1.1 Solr是什么 1.2 Solr与Lucene的区别 2 Solr文件说明 2.1 Solr的目录结构 2.2 其他常用概念说明 2.3 创建基础文件目录 2.4 so ...
- Linux 清理boot分区
今天一登录虚拟机 就被提示boot空间不足 于是赶紧看了下 还有9.2M,刚安装的时候好好的,为什么用了一段时间后就提示空间不足呢? 原因是使用yum update升级内核后 boot分区中就多了 ...