Kettle 学习之从 .ktr 文件生成transMeta对象

简介:

https://github.com/pentaho/pdi-sdk-plugins/blob/master/kettle-sdk-embedding-samples/src/org/pentaho/di/sdk/samples/embedding/RunningTransformations.java

 

1,在DI设计器中设计好 转换 之后 ,该 转换 会以 .ktr 文件的形式持久存储到本地磁盘。并且Kettle提供了方法调用 使得能从 .ktr 文件解析出 transMeta对象 。而transMeta对象 就是表征 转换 运行的一个JAVA对象。

 

2,从 .ktr 文件解析出transMeta对象非常简单,首先要进行运行环境的初始化。否则会报一个 DBCache 类的运行时错误。这个类的对象在创建transMeta对象时会用到。

复制代码
try {
            KettleEnvironment.init();
        } catch (KettleException e) {
            e.printStackTrace();
            return;
        }
transMeta = new TransMeta(ktr, (Repository) null);
复制代码

 

3,transMeta 对象是不能序列化的。因为TransMeta类里面有许多未实现Serializable接口的属性,如:

因此,要想传递transMeta对象,除了上面说到的从 .ktr 文件来解析,还有就是将 transMeta对象转成 String对象,这可以通过 String transMetaXML = transMeta.getXML(); 来完成;然后,再将transMetaXML 保存成文件的形式

复制代码
saveMetaString(this.transMetaXML, fname)//将transMetaXML 保存成文件

readTransMetaFromFile(fname);//从该文件中解析出transMeta对象
----------------------------------------------------------------------------
private boolean saveMetaString( String transMetaString, String fname)
    {
        boolean saved = false;
        
        String xml = XMLHandler.getXMLHeader() + transMetaString;
        try
        {
            //write trans meta string into a tmp file fname
            DataOutputStream dos = new DataOutputStream(KettleVFS.getOutputStream(fname, false));
            dos.write(xml.getBytes(Const.XML_ENCODING));
            dos.close();
            saved = true;
        } catch( KettleFileException e )
        {
            e.printStackTrace();
        } catch( UnsupportedEncodingException e )
        {
            e.printStackTrace();
        } catch( IOException e )
        {
            e.printStackTrace();
        }
        return saved;
    }

private void readTransMetaFromFile(String fname)
    {
        try
        {
            //rebuild a TransMeta object from file
            Document document = XMLHandler.loadXMLFile(fname);
            Node root = document.getDocumentElement();
            if( transMeta == null )
            {
                transMeta = new TransMeta();
                transMeta.loadXML(root, fname, null, null, true, new Variables(), null);
            }
        } catch( KettleXMLException e )
        {
            e.printStackTrace();
        } catch( KettleMissingPluginsException e )
        {
            e.printStackTrace();
        }
        
    }
复制代码

 

4,此外,关于Kettle插件开发,以及 扩展Kettle 转换、作业 的官方参考文档:

http://infocenter.pentaho.com/help/index.jsp?topic=%2Fpdi_embed_extend_guide%2Ftask_building_transforms_on_the_fly.html

 关于 Kettle的开发 主要参考:Develop Custom Solutions > Embed and Extend DI


本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/,如需转载请自行联系原作者

相关文章
|
3月前
|
SQL
kettle开发篇-参数
kettle开发篇-参数
41 0
|
3月前
kettle开发篇-空操作
kettle开发篇-空操作
31 0
|
3月前
|
数据库
kettle开发篇-映射
kettle开发篇-映射
45 0
|
4月前
|
SQL 数据采集 Java
Java【代码分享 02】商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+获取及解析源代码)包含csv和sql格式数据下载可用
Java【代码分享 02】商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+获取及解析源代码)包含csv和sql格式数据下载可用
41 0
|
存储 数据采集 文件存储
|
SQL Oracle 关系型数据库
Kettle输出步骤(四)
Kettle输出步骤(四)
153 0
Kettle输出步骤(四)
|
关系型数据库 MySQL 数据库
idea里面mysql数据库统一配置文件和存放到集合中读取出来详细步骤
统一配置可以方便后期代码的维护,比如更改mysql的密码或者什么就可以直接在资源配置文件里面更改就好,不用到代码里面去更改了。
131 0
idea里面mysql数据库统一配置文件和存放到集合中读取出来详细步骤
|
数据采集
无事来学学--Kettle中转换组件使用(上)
如果想具体看看转换的概念和特点可以点击之前的博客
119 0
无事来学学--Kettle中转换组件使用(下)
如果想具体看看转换的概念和特点可以点击之前的博客
128 0