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中增量数据的抽取的更多相关文章

  1. ETL中的数据增量抽取机制

    ETL中的数据增量抽取机制 (     增量抽取是数据仓库ETL(extraction,transformation,loading,数据的抽取.转换和装载)实施过程中需要重点考虑的问 题.在ETL过 ...

  2. ODI利用goldengate实现增量数据捕获

    ODI利用goldengate实现增量数据捕获 上个月,Oracle发布了ODI的最新版本10.1.3.6_02,其中增加了针对采用goldengate获取源数据库增量变化的知识模块,这样当系统需要实 ...

  3. Canal:同步mysql增量数据工具,一篇详解核心知识点

    老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...

  4. Web网页中动态数据区域的识别与抽取 Dynamical Data Regions Identification and Extraction in Web Pages

    Web网页中动态数据区域的识别与抽取 Dynamical Data Regions Identification and Extraction in Web Pages Web网页中动态数据区域的识别 ...

  5. Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)

    目录 1 加入数据导入处理器的jar包 2 加入数据库驱动包 3 配置solrconfig.xml文件 3.1 配置lib标签 - 加入驱动jar包 3.2 配置requestHandler标签 - ...

  6. XPatchLib 对象增量数据序列化及反序列化器 For .Net

    在日常的软件开发和使用过程中,我们发现同一套系统的同一配置项在不同的客户环境中是存在各种各样的差异的.在差异较为分散时,如何较好的管理这些差异,使得维护过程能够更加安全和快速,一直在这样那样的困扰着开 ...

  7. 如何实现Qlikview的增量数据加载

    笔者备注: 刚刚接错Qlikview,上网搜集的资料,如何处理增量数据. 1 寻找增量时间戳(1)各种数据库:表的创建时间字段和修改时间字段或者最后的修改时间字段:(2)sql server:可以用找 ...

  8. Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据

    Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据 PRM 全称为ParnassusData Recovery Manager ,由 诗檀软 ...

  9. 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, ...

随机推荐

  1. Pytorch入门实例:mnist分类训练

    #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'denny' __time__ = '2017-9-9 9:03' import ...

  2. asp.net core系列 24 EF模型配置(主键,生成值,最大长度,并发标记)

    一.主键 键用作每个实体实例的主要唯一标识符. 使用关系数据库时,这会映射到主键的概念. 还可以配置不是主键的唯一标识符.按照约定,名为 Id 或 <type name>Id 的属性会配置 ...

  3. SpringBoot入门教程(十九)@ControllerAdvice+@ExceptionHandler全局捕获Controller异常

    在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...

  4. 《HelloGitHub月刊》第 10 期

    前言 这一年感谢大家的支持,小弟这里给大家拜年了! <HelloGitHub月刊>会一直做下去,欢迎大家加入进来提供更多的好的项目. 最后,祝愿大家:鸡年大吉- <HelloGitH ...

  5. leetcode — gray-code

    import org.lep.leetcode.groupanagrams.GroupAnagram; import java.util.ArrayList; import java.util.Arr ...

  6. mongos-sharding连接池配置

    ShardingTaskExecutorPoolMaxSize Maximum number of outbound connections each TaskExecutor connection ...

  7. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本模块管理界面新增模块排序功能

    模块(菜单)的排序是每个系统都必须要有的功能,我们框架模块的排序在业务逻辑中已经体现. WinForm版本可以直接在界面上对模块进行排序以控制模块展示的顺序.Web版本在3.2版本中也新增了直接可以模 ...

  8. sysbench的框架实现介绍

    sysbench是一个非常经典的综合性能测试工具,它支持CPU,IO,内存,尤其是数据库的性能测试.那它是怎么做到通用性的呢,总结一句话是大量运用了重载的方法. sysbench总体架构 sysben ...

  9. web缓存策略之HTTP缓存大全

    一. web缓存总分类 数据库数据缓存 Web应用,特别是SNS类型的应用,往往关系比较复杂,数据库表繁多,如果频繁进行数据库查询,很容易导致数据库不堪重荷.为了提供查询的性能,会将查询后的数据放到内 ...

  10. MySQL ProxySQL相关维护说明

    背景: 前面的2篇文章MySQL ProxySQL读写分离使用初探和MySQL ProxySQL读写分离实践大致介绍了ProxySQL的使用说明,从文章的测试的例子中看到ProxySQL使用SQLIT ...