1

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

select * from ?

这个表输入从Get Variables我定义了一个名为'table_name'. 当我运行转换时,我传入表名。

我需要这样做,因为表名的形式是 abc_ddmmyyyy 并且 ddmmyyyy 可以变化。

4

3 回答 3

0

使用 ${TABLE_NAME} 等变量。? 表示准备好的陈述,对你的工作没有好处。

于 2014-10-30T08:57:10.420 回答
0

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

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

于 2013-11-14T18:55:56.323 回答
0

This can solve through using java code for this first you set parameter in Edit->Settings and see parameter tab and add your parameter suppose parameter name like TABLE_NAME then write java code as below

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;

The above jar found in pdi lib folder. and set table name as below

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();
                 }

And write in your ktr table query like select * from ${TABLE_NAME}

于 2013-11-18T07:24:42.233 回答