如何在pentaho中传递表名作为输入

时间:2013-11-07 20:49:23

标签: pentaho

我正在进行pentaho转换并使用表输入。条件是表的名称将作为参数动态传递。所以表输入有sql:

select * from ?

此表输入从Get Variables步骤获取输入,其中我定义了一个名为'table_name'的变量。当我运行转换时,我传入tablename。

我需要这样做,因为表名的格式为abc_ddmmyyyy,ddmmyyyy可能会有所不同。

3 个答案:

答案 0 :(得分:0)

您是否考虑过使用元数据注入?这篇文章可以提供帮助: http://www.pentahoevalcenter.com/data-integration/dynamic-step-metadata/

还有一篇关于每个文件名运行一次转换的文章: http://www.timbert.net/doku.php?id=techie:kettle:jobs:processtransonceperfile

答案 1 :(得分:0)

这可以通过首先使用java代码来解决,在Edit-> Settings中设置参数并查看参数选项卡并添加参数假设参数名称如TABLE_NAME然后编写如下的java代码

import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.Result;
import org.pentaho.di.core.RowMetaAndData;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.util.EnvUtil;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;

上面的jar在pdi lib文件夹中找到。并将表名设置如下

KettleEnvironment.init(false);
                EnvUtil.environmentInit();
                TransMeta transmeta = new TransMeta("path of your ktr file");
                Trans trans = new Trans(transmeta);
                trans.setParameterValue("TABLE_NAME",your_table_name );
                trans.execute(null); 
                trans.waitUntilFinished();
                Result r = trans.getResult();
                List<RowMetaAndData> rowsResult = r.getRows();
                System.out.println(trans.getTransMeta());
                 if (trans.getErrors() > 0) {
                 throw new RuntimeException();
                 }

并在您的ktr表格查询中写入select * from ${TABLE_NAME}

答案 2 :(得分:0)

使用$ {TABLE_NAME}之类的变量。 ?意味着准备好的陈述,不会对你的工作有所帮助。