kettle —— 从 oracle 到 oracle的坑
公司有个项目,是使用kettle从oracle上统计,再将结果跟oracle中目标表进行对比更新。接手后,走了一些弯路,中间各种尝试都不尽如人意,也学了kettle的一些组件的用法。正好趁着机会记录 一下。
一、背景:
需求其实很简单,在源oracle中,有大批量的表,是使用定时调度从其他不同的数据库(oracle,mysql,sybase,dameng,sqlserver)中将 “表信息”,“字段信息”,“注释信息”等元数据表,拉取过来,分别做好编号存储。
而kettle要实现的功能:
① 则是从这些源数据表中,将表名、字段名、字段注释、字段长度、字段类型等信息关联出来。
② 并与之前已经做好的一张结果表做关联更新。
③ 将“元数据有变更”的表的四元素(type,length,primary,comment)信息进行update。
④ 如果该字段已经没有了被删除了,则有专用字段标记为"1"。
⑤ 如果是新来的字段,则insert插入目标表。
二、历程:
1. 一开始,机敏的同事使用了一个SQL脚本,用了oracle中的 merge using() matched ....用法,——如果查询结果与目标结果的 table_name和 column_name关联上,则直接将四元素update到目标表中;若没关联上,则直接insert到目标表中。
2. 问题初现: 初步的逻辑相当于:只要关联上,就必须update,这样来说,没有任何变化的字段,也要update一次,造成大量的update其实是可以避免的。而且已删除字段的标记也未实现。
3. 趟雷:
① 最开始,使用kettle的组件来实现SQL中的逻辑,就不贴图了,太长了,而且运行起来的效率低的可怕,后被pass。
② 后来尝试,将SQL优化:
建立临时表;
join的数据的列裁剪;
都用了一遍,但是毫无卵用....效率仍然低(在真实生产环境上直接都跑不动了)
③ 后来尝试了一个新的用法: kettle中有个组件叫“合并记录”:
。 这个小老弟看着不起眼,其实很厉害——它可以将两组数据流进行比对,一个原始的,一个“新来的”,用新来的流与原始的流做比对,并在新产生的流中做标记,标记出哪些是没变的,哪些是新加的(new),哪些是删除了的(deleted),哪些是改变了的(changed)。
当时一看,这不就是为这需求量身打造的组件,直接用起来!
改造逻辑:
查询的SQL保留,但是再从目标表查询出全量数据,将这两个流做比对,用“合并记录”的组件将各种情况的记录都标记出来,在后续的流程中可以使用组件来筛选和进行后续的操作。
改造完成后的图如下:

这样,就将“需要更新”的,“需要插入的”,需要“标记为删除的”分别筛选出来,单独进行更细或者插入的操作了。
然而,还是出现了新的问题,在“更新”和”同步“
三、总结:
① 对于不通的方式,最多2天,不要再深入研究,问题一定不是在整个方向上。
② 解决问题要有逻辑性,哪怕在纸上写出来,将问题一个个的罗列,解决,梳理,能对问题有个明确的方向。
③ 多上cnblog看看大神的数据库笔记。。。
kettle —— 从 oracle 到 oracle的坑的更多相关文章
- Hyper-V安装Oracle Linux6_4 Oracle db 12c并使用rman做异机恢复
本文记录在Windows Server 2012 R2上安装Oracle Enterprise Linux 6.4以及使用RMAN进行进行异机恢复的过程. Windows服务器增加Hyper-V功能 ...
- Streaming data from Oracle using Oracle GoldenGate and Kafka Connect
This is a guest blog from Robin Moffatt. Robin Moffatt is Head of R&D (Europe) at Rittman Mead, ...
- Oracle实例和Oracle数据库(Oracle体系结构)
--========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --==================== ...
- Oracle ORA-01033: ORACLE initialization or shutdown in progress 错误解决办法
Oracle ORA-01033: ORACLE initialization or shutdown in progress 错误解决办法 登陆数据库时提示 “ORA-01033”错误在命令窗口以s ...
- Pre-Query trigger in Oracle D2k / Oracle Forms
Pre-Query trigger in Oracle D2k / Oracle Forms DescriptionFires during Execute Query or Count Query ...
- 【转载】Oracle实例和Oracle数据库(Oracle体系结构)
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:Leshami 原文地址:http://blog.csdn.net/ ...
- Oracle 数据库(oracle Database)Select 多表关联查询方式
Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名 ...
- 搭建一个Oracle到Oracle的Goldengate双向复制环境
目标:搭建一个Oracle到Oracle的Goldengate双向复制环境(支持DDL+DML). 环境: OS:Red Hat Enterprise Linux Server release 5.5 ...
- Oracle 11g oracle客户端(32位)PL/SQL develepment的安装配置
Oracle 11g+oracle客户端(32位)+PL/SQL develepment的安装配置 之前一直想学Oracle,可是就是安装配置Oracle一直未成功,让人很苦恼,特别是什么监听器什么的 ...
- 转://oracle 11gR2 oracle restart 单机使用asm存储 主机名发生更改处理过程
oracle 11gR2 oracle restart 单机使用asm存储 主机名发生更改并且主机重启后处理过程: 以下为解决方案: 1. Remove Oracle Restart configur ...
随机推荐
- WPF 用Clip属性实现蒙板特效
原文:WPF 用Clip属性实现蒙板特效 上一篇,已简单介绍Clip属性的用法,这一篇用它来实现简单蒙板功能,很简单,直接上代码 <Window x:Class="擦除效果.MainW ...
- 张汝京:CIDM模式进可攻、退可守,建议尝试
飞象网讯(路金娣/文)大约30多年前一些美国.日本和欧洲的IDM半导体工厂把多余的产能出来做代工服务,因为代工的公司不会与客户竞争,所以专业代工的模式成为半导体市场的新宠.那么,究竟国内半导体行业更加 ...
- Java 阅读TXT文件
public class GenCategoryAttrItemHandler { private final static String INPUT_FILE_PATH = "input/ ...
- zlog 程序日志的库 交叉编译(Linux生成ARM库,观察执行步骤)
1. zlog 是个很好的写程序日志的库,功能比较强大,上手快. 2. 下载地址:https://github.com/bmanojlovic/zlog 3. cd 到文件夹下,对 autogen.s ...
- WPF 打印不显示的元素
<Window x:Class="_097打印不显示的元素.MainWindow" xmlns="http://schemas.microsoft.c ...
- NSLocalizedDescription=Request failed: unacceptable content-type: text/html 解决方法
使用AFNetworking请求一个网站出现了以下错误 Error Domain=com.alamofire.error.serialization.response Code=- "Req ...
- C# 泛型 无法将类型xx隐式转换为“T”
原文:C# 泛型 无法将类型xx隐式转换为“T” 直接奖泛型转为T是不能转换的 要先转Object 例: public static T GetValue<T>(string inValu ...
- 动态加载XAML
string FadeInStoryBoard = "<StoryBoard ... />"; StoryBoard storyBoard = XamlReader.L ...
- winform子容器随父容器的变化设置
在设计winform窗体时,因为会很少去调整窗体的大小,这时子控件就会出很尴尬的情况, 通过查看空间的属性,发现有这样两个属性,dock和anchor.这里主要说anchor,官方 解释没太看懂,我的 ...
- UBUNTU 16.04 + CUDA8.0 + CUDNN6.0 + OPENCV3.2 + MKL +CAFFE + tensorflow
首先说一下自己机子的配置 CPU:Intel(R) Core(TM) i5-5600 CUP @3.20GHz *4 GPU : GTX 1060 OS : 64bit Ubuntu16.04LTS ...