使用javascript访问kettle内部组件

使用javascript访问kettle内部组件

很少有ETL项目需求使用kettle标准步骤不能实现的。假设举例每条记录都需标记为来自那个数据库的信息,原数据库是通过DB连接设置的,那如何获取这些设置?(类型、主机、端口、数据库名称等)

在kettle中没有标准步骤可以实现,幸运的是javascript步骤可以访问kettle内部组件并实现以上需求。

访问kettle内部组件是_step_变量,其被自动设置在每个javascript步骤中。它代表javascript步骤本身,步骤的getTransMeta()方法返回TransMeta对象,表示整个转换,TransMeta对象可以用来获取关于定义在转换中的数据库连接信息。正确的TransMeta对象通过findDatabase()方法获得,返回DatabaseMeta对象,其他提供了一组方法返回数据库连接的信息。

下面的代码获取名称为“SourceDB”数据库连接的一些信息。

// get db object

var db = _step_.getTransMeta().findDatabase("SourceDB");

// ask db object for information

var db_type = db.getDatabaseTypeDesc();

var db_host = db.getHostname();

var db_port = db.getDatabasePortNumberString();

var db_name = db.getDatabaseName();

var db_tblspace = db.getDataTablespace();

var db_idxspace = db.getIndexTablespace();

var db_user = db.getUsername();

var db_pass = db.getPassword();

var db_url = db.getURL();

var db_driver = db.getDriverClass();

需要提醒的是,kettle版本在不断更新,其内部组件在不同版本之间可能不同。因此在把访问kettle内部组件的代码升级到一个新的版本时,需要做全面的测试。

说了那么多,不如去下载示例代码,其写数据库连接信息到一个文本文件,在5.1版本测试。

希望大家一起交流讨论,你们的建议是我的动力。

时间: 2024-10-17 06:38:43

使用javascript访问kettle内部组件的相关文章

javascript动手写日历组件(2)——优化UI和添加交互(by vczero)

一.优化UI 继上一篇,http://www.cnblogs.com/vczero/p/js_ui_1.html.开始优化UI,主要优化的部分有: (1)增加星期行.(2)字体设置.(3)日期垂直居中.(4)将单元格->底部线条.(5)修改文本的颜色对比.(6)将内部调用的函数加前缀_,如_addHeader()._addWeekday(). 修改的后基本效果如下图: 整个代码做了小修小改: 1 var Calendar = function(div){ 2 this.div = documen

JavaScript访问修改css样式表

1.访问元素中style属性的css样式 可以根据属性的ID或name标签利用dom操作直接访问到内部的css样式,直接使用style对象访问 <div id="myid" style="backgroundColor:blue;"></div> <script type="text/javascript"> var mydiv1=document.getElementById("myid"

mysql内部组件架构,索引管理,视图view

--以下内容摘自马哥教育课堂 === 单进程多线程模型 每个用户连接都使用一个线程 mysql使用线程池来管理各个线程 mysql内部组件架构 connection --management service & unities(管理服务单元,如备份恢复,集群,合并,迁移工具,复制工具): connection pool(认证,线程重用,连接限制,内存检查,缓存): --SQL接口(DML,DDL,存储过程,视图,触发器): 分析器parser(查询翻译成二进制指令,访问权限): 优化器optim

浅析JVM内部组件

原文地址:http://blog.jamesdbloom.com/JVMInternals.html(转载请注明英文原文出处以及本文地址) 这篇文章简要解析了JVM的内部结构.下面这幅图展示了一个典型的JVM(符合JVM Specification Java SE 7 Edition)所具备的关键内部组件. 上图展示的所有这些组件都将在下面两个章节中被解析.第一章包含将会在每个线程上创建的组件:第二章包含那些不依赖于线程即可创建的组件(线程间可共享的组件). 线程内创建 JVM系统线程 单个线程

Docker进阶之二:Docker内部组件

Docker内部组件 Namespaces 命名空间,Linux内核提供的一种对进程资源隔离的机制,例如进程,网络,挂载点等资源.    docker run -d busybox ping baidu.com   只能看见容器内的资源情况,并看不到宿主机的任何进程和文件系统. CGroups 控制组,Linux内核提供的一种限制进程资源的机制:例如cpu,内存等资源.    主要防止某一个容器资源过多导致宿主机资源紧张 UnionFS    联合文件系统,支持将不同位置的目录挂载到同一虚拟文件

ADO.NET程序访问数据的组件

组成--数据集(内存中的数据库) --DataSet数据集 --DataTable数据表 --DataColumn数据列 --DataRow数据行 --DataView数据视图--NET数据提供程序 --Connection连接(程序和数据库之间的桥梁) --Open/Close --ConnectionString:连接字符串(目标数据库的信息) --服务器:server / data source --用户名:uid / user id --密码:pwd / password --数据库:d

javascript动手写日历组件(1)——构建日历逻辑 (by vczero)

一.分析日历的组成部分和交互要素 (1)组成部分:选择年月部分.星期显示.包含本月(或者有前月和下一个月部分日子) (2)根据选择的年和月份,动态绘制日历面板. (3)一个日历 7(天) * 5(周) = 35格表格. (4)一个月份是统一的一个面板:一个月的头一天一定在日历面板的第一行,根据该天的“星期几”确定位置. (5)第一格子是星期一,最后一个格子是星期日,为5周的日历面板. 二.确定逻辑设计 日历上面的日历,8月1号建军节为什么会出现在这一格?因为一个月的天数是小于5周(35天)的,因

【JS】JavaScript引擎的内部执行机制

 近期在复习JavaScript,看到setTimeout函数时.想起曾经刚学时,在一本书上看过setTimeout()里的回调函数执行的间隔时间有昌不是后面设置的值.曾经没想太多.网上看了JS大神的解释,整理记录下JavaScript引擎的内部执行机制. 首先看一段小程序: <script> alert('第1'); setTimeout(function(){alert('第2');}, 2000); alert('第3'); </script> 输出顺序是:第1.第3,第

用 Kettle UDJC 组件实现用户行为组序列

用户登录APP,然后浏览了一些列页面.如果获取用户行为数据时没有对每次登陆分组,那么想知道用户每次登陆的行为数据就有点难了.下面使用 Kettle UDJC 组件给用户行为序列分组添加序列. private String diffListId = ""; private String diffFuncNo = ""; private int fieldSeq = 0; public boolean processRow(StepMetaInterface smi,