ETL kettle 数据调取防止意外停止处理
pentaho kettle是目前使用比较广泛的一种etl工具
但是在使用的时候如做定时任务 会存在如果任务异常停止会发生数据不准或者丢失数据的情况
这种情况在《Pentho Kettle Solutions》应该也有所涉及 但是并未给出实际的解决方案
以下文章是本人自己的解决思路:
首先使用标识符字段来判断数据是否已被抽取:
图中表最后一个字段flag为标识符,每次抽取数据完成后 更新此flag以表示数据已经被调取
转换示意图:
这是很常用的一种数据抽取方法,每次抽取数据都判断table A 的flag字段是否为1 如果不是1 则不抽取此条数据,抽取完成后更新flag 字段为0,这样就保证了表A的每条数据都只抽取一次
我们知道 "插入/更新" 的速度可能会比更新的速度要慢 这样数据还没有到B表 标识符就提前被更新了,当然如果转换成功完成 这并没有什么问题,但是如果此时因为意外情况转换停止了(服务器重启,停电,断网等情况),或因为某些原因需要手动停止转换,那么这时候数据就会出现数据还没有到B表 标识符已经被更新,下次抽取数据就会跳过这些数据行造成数据丢失而且原因很难查。
如何解决这个问题呢:请看转换示意图:
我们在表输入后面加了一个延迟行的步骤 延迟时间 要大于 转换中最慢的步骤的速度
这样即可保证每条数据 准且的到达目的地后 才会更新标识符 当然这样做就会牺牲转换的性能
之后有更好的方法我会及时更新
ETL kettle 数据调取防止意外停止处理的更多相关文章
- 数据层交换和高性能并发处理(开源ETL大数据治理工具--KETTLE使用及二次开发 )
ETL是什么?为什么要使用ETL?KETTLE是什么?为什么要学KETTLE? ETL是数据的抽取清洗转换加载的过程,是数据进入数据仓库进行大数据分析的载入过程,目前流行的数据进入仓库的 ...
- Kettle数据抽取解决方案
一. Kettle介绍 1. Kettle简介 ETL即数据抽取(Extract).转换(Transform).装载(Load)的过程.Kettle的中文翻译为水壶.Kettle以元数据驱动的方式提供 ...
- 转-"进程android.process.acore已意外停止" 解决办法
运行手机虚拟机时,老是弹出这样的“android.process.acore“服务已意外停止,虽不影响正常使用,但终究影响心情.网上找的方案,按如下步骤操作,可以解决问题: 出现这个提示不用担心,并不 ...
- 如何评估ETL的数据加载时间
简述如何评估大型ETL数据加载时间. 答:评估一个大型的ETL的数据加载时间是一件很复杂的事情.数据加载分为两类,一类是初次加载,另一类是增量加载. 在数据仓库正式投入使用时,需要进行一次初次加载,而 ...
- MYSQL启动报1067错误,系统日志中是“服务 mysql 意外停止” Mysql日志中则是:“Plugin \'FEDERATED\' is disabled”
MYSQL启动报1067错误,系统日志中是"服务 mysql 意外停止" Mysql日志中则是:"Plugin \'FEDERATED\' is disabled&quo ...
- Plugin 'FEDERATED' is disabled 或 1067错误 启动错误与“服务 mysql 意外停止”解决方法
MYSQL启动报1067错误,系统日志中是“服务 mysql 意外停止” Mysql日志中则是:“Plugin 'FEDERATED' is disabled” 网我在网上找到解决方案:1.在MY.I ...
- 【转载】Storm TickTuple 意外停止
原文链接转自:http://woodding2008.iteye.com/blog/2328114 Storm的滑动窗口TickTuple通常用来控制bolt定制执行入库操作,使用过程中遇到了Tick ...
- mysql 服务意外停止1067错误解决办法小结
今天在配置服务器时安装mysql5.5总是无法安装,查看日志错误提示为1067错误,下面来看我的解决办法 事件类型: 错误 事件来源: Service Control Manager 事件种类: 无 ...
- thinkphp 找数据库某个字段为空的数据,PHP 数据调取 空数据
$arr['dingwei'] = array('EXP','is null');
随机推荐
- Redis 排行榜 自己简单练习
<?php class Ranks{ const PREFIX = 'zhengban'; protected $redis = ''; /* 初始化 */ public function __ ...
- 包含中文字符的NSString 转换为NSURL
转包含中文字符的NSString 转换为NSURL NSString中如果包括中文字符的话转换为NSURL得到的值为nil,在网上搜了下,用stringByAddingPercentEscapesUs ...
- nginx 特定目录禁止php执行
LNMP有一个缺点就是目录权限设置上不如Apache,有时候网站程序存在上传漏洞或类似pathinfo的漏洞从而导致被上传了php木马,而给网站和服务器带来比较大危险. 建议将网站目录的PHP权限去掉 ...
- MySQL动态添删改列字段
动态增加列字段: ); 动态删除列字段: alter table TableName drop column field_id; 动态修改列字段: alter table TableName chan ...
- js 验证文本框只能输入数字和小数点
第一步.添加js方法 function check(e) { var re = /^\d+(?=\.{0,1}\d+$|$)/ if (e.value != "") ...
- swift 启动图片的设置
1 .找到Assets.xcassets 2. 在Assets.xcassets里创建 New LaunchImage 拖入相应的图片 3.选中你的项目,点击General 在App Icons an ...
- Spring context:component-scan中使用context:include-filter和context:exclude-filter
Spring context:component-scan中使用context:include-filter和context:exclude-filter XML: <?xml version= ...
- Java中的封装、继承、多态
封装 在如何理解面向对象这篇文章中,提到所谓的封装就是"功能都给你做好了,你不必去理解它是怎么写出来的,直接使用即可.".但你得清楚一点,那就是这句话是相对于使用者来说的,而作为开 ...
- Android开发系列之Context
相信大家对于Context应该非常熟悉,但是Context到底是什么意思呢?到底指的是什么东西呢?我们可以理解为当前对象在程序中所处的一个环境,一个与系统交互的过程.Android系统的上下文对象,即 ...
- Python内置数据类型总结
python的核心数据类型:(很多语言之提供了数字,字符串,文件数据类型,其他形式的数据类型都以标准库的形式表示 也就是用之前需要import ) ,但是python有很多都是内置的,不需要impor ...