实现目标:通过ODI获取一个没有时间戳的子表(qb_bw)的增量数据,而主表(qb_tb)有一个rksj入库时间,且主表和子表之间通过ID关联。目标表名是qb_bw1.

设计原理:通过在ODI的mapping中关联主表和子表,然后在主表的rksj上设置时间过滤,最后将子表的字段映射到目标表中。在此设计中,需要有一个变量,此变量在第一次运行时,使用一个初始值,这样第一次运行会获取此初始值后的所有源数据到目标表,然后根据目标表的rksj更新此变量值,从而得到目标表上最大的时间戳,再基于此时间点去获取源表的记录,从而实现每次运行都可以得到新增的数据。

创建变量

新建一个变量保存目标表入库时间的最大值。

基于文本类型定义变量。

使用SQL获取目标表时间字段的最大值。

创建mapping

主表的数据基于时间字段过滤,再跟子表关联后加载子表的数据到目标表。

主表的过滤条件设置

主表和子表的关联条件设置

目标表上新增的入库时间字段,从源端主表获取。

以上映射建立完成之后,可以试运行,确保逻辑是正确的,理论上会基于变量的初始值获取源端的数据加载到目标表。即获取rksj>’2018-05-11’的所有数据加载到目标表。

创建程序包

再建立相关的数据处理流程,即循环获取增量。新建一个“程序包”

拖拉刚才创建的变量两次,以及刚才的mapping.

第一个变量上设置为“声明变量”

第二个变量为“刷新变量”

以上程序包已经可以手工执行,每次执行获取相应的增量数据到目标表。

定时调度

保存“程序包”,并生成场景。

在生成的场景上,新建一个调度(前提是后台的agent在正常运行)

设置场景开始运行的时间

设置场景循环的间隔

在agent配置处,更新调度信息。

现在即可在查看日志处,看到指定间隔的时间之后,有该程序包处理的日志,以及每次运行后获取的增量记录数等信息。

最新文章

  1. coffeeScript中类的多态[学习篇]
  2. Jenkins Job 自杀 groovy
  3. Eclipse版本及其代号
  4. (转载)C语言预处理
  5. UVa 297 - Quadtrees
  6. ios开发——实用技术篇Swift篇&地址薄、短信、邮件
  7. linux bash shell中case语句的实例
  8. SCGHR_存储过程(eSP_IDChangeStart)_政治面貌为什么不能正确更新
  9. 使用AudioTrack播放PCM音频数据(android)
  10. 【java】基础中的杂乱总结(一)
  11. php实现中文字符串无乱码截取
  12. numpy 数组索引数组
  13. [UNITY 5.4 UGUI] 控件重叠触摸穿透
  14. Redux DevTools浏览器插件调试redux
  15. Java并发容器——ConcurrentSkipListMap和ConcurrentHashMap
  16. 2016年第七届蓝桥杯C/C++B组省赛题目解析
  17. ES6-let & const
  18. webpack entry和output配置属性
  19. 性能调优的本质、Spark资源使用原理和调优要点分析
  20. Linux-vi/vim编辑器常用命令与用法

热门文章

  1. CF_2018-2019 Russia Open High School Programming Contest (Unrated, Online Mirror, ICPC Rules, Teams Preferred)
  2. mvc文件下载
  3. 4、json-server的使用
  4. 解密Redis的持久化和主从复制机制
  5. mysql 5.7.21 解压版安装配置方法图文教程
  6. LeetCode 96 - 不同的二叉搜索树 - [DP]
  7. HTML+CSS+JavaScript-案例
  8. thinkphp ckeditor与ckfinder
  9. 一篇文章彻底弄懂Base64编码原理
  10. iOS 高级去水印,涂鸦去水印