利用KETTLE进行数据迁移(改良版)
来源:互联网 发布:ug8.0数控编程实例 编辑:程序博客网 时间:2024/06/05 22:36
原文地址: http://ainidehsj.iteye.com/blog/1735434
我用Kettle 6.1,从 Mysql到Oracle 存在一下问题:
1、 字段类型不一致,没有主键约束;
2、 当源表数据为空时,就会报空指针异常(据了解,其他版本可能也存在这种问题)
问题原因:
在Java代码中获取的sql就和原本的表字段属性不一致了(大部分在Oracle中无法识别的属性,自动改成了 VARCHAR2(2000)),并且没有主键约束。
解决方案:
将原文中的“入库表结构创建”改成以下 转换流程:
表输入:
字段选择:
建表:
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException{ // First, get a row from the default input hopObject[] r = getRow();org.pentaho.di.core.database.DatabaseMeta dbmeta = null; System.out.println( getTrans().getRepository());java.util.List list = getTrans().getRepository().readDatabases();if(list != null && !list.isEmpty()){for(int i=0;i<list.size();i++){dbmeta = (org.pentaho.di.core.database.DatabaseMeta)list.get(i); //161_orcl_cpsdw 为数据库名称if("161_orcl_cpsdw".equalsIgnoreCase(dbmeta.getName())){break;}}}if(dbmeta!=null){org.pentaho.di.core.database.Database db=new org.pentaho.di.core.database.Database(dbmeta);try{db.connect();String sql = get(Fields.In, "tableSql").getString(r);if(sql.trim().length()>0){db.execStatement(sql.replace(";", "").replaceAll("DEFAULT NULL", "").replaceAll("ENGINE=InnoDB DEFAULT CHARSET=utf8", "").replaceAll("`", "").replaceAll("int", "number").replaceAll("decimal", "number")//这里对表名进行了修改replaceAll("tlk_", "cpmt_").replaceAll("datetime", "date").replaceAll("varchar", "varchar2").replaceAll("tlk_", "cpmt_").replaceAll("bit", "char").replaceAll("longtext", "varchar2(2000)"));}}catch(Exception e){logError("创建表出现异常",e);}finally{db.disconnect();}}return false;}0 0
- 利用KETTLE进行数据迁移(改良版)
- 使用Kettle进行数据迁移(ETL)
- 使用Kettle进行数据迁移(ETL)
- kettle数据迁移
- kettle 迁移数据
- kettle--数据迁移
- 使用kettle完成数据迁移
- 利用expdp/impdp数据泵对oracle进行数据迁移
- ubuntu 16.04 上 Redis利用持久化进行数据迁移
- 使用Kettle来完成数据迁移
- 数据迁移之Kettle的使用小结
- 开源ETL工具kettle--数据迁移
- 数据迁移ETL之kettle一
- 数据迁移工具kettle简单上手
- 使用Kettle进行数据挖掘
- 利用Navicat数据迁移
- 利用管道迁移数据
- Oracle 数据进行迁移
- C++标准库:关联容器(set、map、unordered、multi)
- 【redis源码剖析】 redis内置数据类型之字符串sds
- Linux编写shell脚本处理Catalina.out长时间大量日志占用系统空间问题
- nodejs 安装与配置
- qt开发过程中遇到的问题整理
- 利用KETTLE进行数据迁移(改良版)
- Javascript跳转页面和打开新窗口等方法
- jmeter-安装
- SpringMVC的@ResponseBody注解说明
- 知识总结之 插件化基础 java反射与代理
- android开发之popupwindow的使用及细节
- 获取图层信息 arcgis api for js
- Exception in thread "main" java.lang.NoClassDefFoundError
- 笔记——过滤器与包装器