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/,如需转载请自行联系原作者

相关文章
|
安全 Android开发 数据安全/隐私保护
请说明鸿蒙操作系统与其他操作系统(如Android和iOS)的主要区别。
请说明鸿蒙操作系统与其他操作系统(如Android和iOS)的主要区别。
1116 1
|
存储 Java
java对两个字符串进行比较,分别取出重复和不重复的。
java对两个字符串进行比较,分别取出重复和不重复的。
396 0
|
计算机视觉
教你如何玩转Modelscope (一、图片编辑与描述生成)
本文通过一个有趣的图片处理例子,教你如何利用modelscope强大且多样的模型能力去解锁你专属的图片编辑能力。
3421 1
教你如何玩转Modelscope (一、图片编辑与描述生成)
|
6月前
|
监控 自动驾驶 算法
《目标检测双雄:YOLO与Faster R-CNN,谁主沉浮?》
目标检测是计算机视觉的重要技术,广泛应用于安防、自动驾驶和工业生产等领域。YOLO与Faster R-CNN是其中的两大代表算法。YOLO以速度见长,将目标检测转化为回归问题,通过一次前向传播实现快速检测,适合实时性要求高的场景,如自动驾驶和视频监控。Faster R-CNN则采用两阶段策略,先生成候选区域再精确定位,检测精度更高,适用于医学影像分析、工业缺陷检测等对准确性要求极高的领域。两者各具优势,在不同场景中发挥独特作用,共同推动计算机视觉技术的发展。
202 4
|
前端开发 小程序 Java
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
本文详细介绍了如何在SpringBoot项目中统一处理接口返回结果及全局异常。首先,通过封装`ResponseResult`类,实现了接口返回结果的规范化,包括状态码、状态信息、返回信息和数据等字段,提供了多种成功和失败的返回方法。其次,利用`@RestControllerAdvice`和`@ExceptionHandler`注解配置全局异常处理,捕获并友好地处理各种异常信息。
5703 0
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
|
消息中间件 关系型数据库 MySQL
Flink的sink实战之四:自定义
Flink官方提供的sink服务可能满足不了我们的需要,此时可以开发自定义的sink,文本就来一起实战
928 0
Flink的sink实战之四:自定义
|
SQL 分布式计算 关系型数据库
Clickhouse时间日期函数一文详解+代码展示
Clickhouse时间日期函数一文详解+代码展示
3480 0
Clickhouse时间日期函数一文详解+代码展示
|
存储 数据处理 开发者
从入门到精通:Python中的常用数据结构
Python是一种广泛使用的高级编程语言,其简洁明了的语法和强大的数据处理能力使得它成为了众多开发者的首选。本文将深入探讨Python中的常用数据结构,包括列表、元组、字典和集合,并介绍它们的应用场景,帮助读者更好地理解并掌握这些基础的数据结构。
|
开发者 UED 智能硬件
请简要介绍一下鸿蒙操作系统的特点和优势。
请简要介绍一下鸿蒙操作系统的特点和优势。
2058 0