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)的主要区别。
1493 1
|
存储 Java
java对两个字符串进行比较,分别取出重复和不重复的。
java对两个字符串进行比较,分别取出重复和不重复的。
443 0
uniapp点击图片预览功能?
uniapp点击图片预览功能?
1077 0
|
计算机视觉
教你如何玩转Modelscope (一、图片编辑与描述生成)
本文通过一个有趣的图片处理例子,教你如何利用modelscope强大且多样的模型能力去解锁你专属的图片编辑能力。
3489 1
教你如何玩转Modelscope (一、图片编辑与描述生成)
|
4月前
|
存储 机器学习/深度学习 Java
Java 大视界 -- Java 大数据在智慧水利水资源调度与水情预测中的应用创新(180)
本文探讨了Java大数据技术在智慧水利中的创新应用,重点分析了其在水资源调度与水情预测中的关键技术与实践案例。通过大数据存储、实时处理与深度学习模型,Java有效提升了水利数据管理效率与水情预测准确性,助力传统水利向智能化转型。
|
5月前
|
安全 Ubuntu Linux
硬盘格式化用什么工具好?这6个工具值得了解一下
本文介绍了硬盘格式化的重要性及注意事项,并推荐了几款主流平台下的实用格式化工具,包括Windows磁盘管理器、文件资源管理器、DiskGenius、Diskpart命令行、Mac Disk Utility以及Linux的GParted,帮助用户安全高效地完成格式化操作。
|
7月前
|
监控 自动驾驶 算法
《目标检测双雄:YOLO与Faster R-CNN,谁主沉浮?》
目标检测是计算机视觉的重要技术,广泛应用于安防、自动驾驶和工业生产等领域。YOLO与Faster R-CNN是其中的两大代表算法。YOLO以速度见长,将目标检测转化为回归问题,通过一次前向传播实现快速检测,适合实时性要求高的场景,如自动驾驶和视频监控。Faster R-CNN则采用两阶段策略,先生成候选区域再精确定位,检测精度更高,适用于医学影像分析、工业缺陷检测等对准确性要求极高的领域。两者各具优势,在不同场景中发挥独特作用,共同推动计算机视觉技术的发展。
272 4
|
8月前
|
人工智能 小程序 算法
【01】AI制作音乐之三款AI音乐软件推荐,包含AI编曲-AI伴奏-AI混音合成remix等-其次关于音乐版权的阐述-跟随卓伊凡学习如何AI制作音乐-优雅草卓伊凡
【01】AI制作音乐之三款AI音乐软件推荐,包含AI编曲-AI伴奏-AI混音合成remix等-其次关于音乐版权的阐述-跟随卓伊凡学习如何AI制作音乐-优雅草卓伊凡
1331 14
|
小程序 数据库
【微信小程序-原生开发】实用教程10 - 动态的新增、修改、删除(含微信云数据库的新增、修改、删除,表单弹窗、确认弹窗、日期选择器、单行输入框、多行输入框、滑动组件的使用)
【微信小程序-原生开发】实用教程10 - 动态的新增、修改、删除(含微信云数据库的新增、修改、删除,表单弹窗、确认弹窗、日期选择器、单行输入框、多行输入框、滑动组件的使用)
714 0
|
前端开发 小程序 Java
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
本文详细介绍了如何在SpringBoot项目中统一处理接口返回结果及全局异常。首先,通过封装`ResponseResult`类,实现了接口返回结果的规范化,包括状态码、状态信息、返回信息和数据等字段,提供了多种成功和失败的返回方法。其次,利用`@RestControllerAdvice`和`@ExceptionHandler`注解配置全局异常处理,捕获并友好地处理各种异常信息。
6449 0
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅