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. innerHTML,outerHTML,innerText,outerText

    - innerHTML 设置或获取位于对象起始和结束标签内的 HTML - outerHTML 设置或获取对象及其内容的 HTML 形式 - innerText 设置或获取位于对象起始和结束标签内的文 ...

  2. 解决SpringMVC中文乱码问题--这是前端传参数到服务器

    SpringMvc参数传递中乱码问题   问题描述: 当传递中文参数到controller类时,无乱是get方式还是post方式都出现乱码 解决: 1.保证所有的页面编码都是utf-8,包括jsp页面 ...

  3. Python内置函数(26)——globals

    英文文档: globals() Return a dictionary representing the current global symbol table. This is always the ...

  4. Django中的templates(你的HTML页面放哪里)

    本文回答Django里面的HTML文件应该怎么放,以及Django是如何查找模板文件的. 到目前为止我们没有使用HTML页面,在之前的说明中所有内容都是写死在程序里的,如果你想改变内容就要修改代码.但 ...

  5. 记录阿里云服务器mysql被黑

    前言 比上次服务器被黑还要恐怖的数据库被黑,再次强调,数据库不备份不做安全,你就可以准备跑路了. 这次记录一下整个被黑的过程,以及整个检查和处理的过程. 发现 上个月某一天,网站出现了无法登录的情况, ...

  6. leetcode — best-time-to-buy-and-sell-stock

    /** * Source : https://oj.leetcode.com/problems/best-time-to-buy-and-sell-stock/ * * * Say you have ...

  7. leetcode — partition-list

    /** * Source : https://oj.leetcode.com/problems/partition-list/ * * * Given a linked list and a valu ...

  8. Hbase王国游记之:Hbase客户端API初体验

    §历史回顾 2018年岁末,李大胖朦胧中上了开往Hbase王国的车,伴着一声长鸣,列出缓缓驶出站台,奔向无垠的广袤. (图片来自于网络) 如不熟悉剧情的,可观看文章: 五分钟轻松了解Hbase列式存储 ...

  9. 克拉克拉(KilaKila):大规模实时计算平台架构实战

    克拉克拉(KilaKila):大规模实时计算平台架构实战 一.产品背景:克拉克拉(KilaKila)是国内专注二次元.主打年轻用户的娱乐互动内容社区软件.KilaKila推出互动语音直播.短视频配音. ...

  10. grafana使用详解--技术流ken

    grafana简介 Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知.它主要有以下六大特点: 1.展示方式:快速灵活的客户端图表,面板插件有 ...