我正在进行 pentaho 转换并使用表格输入。条件是表的名称将作为参数动态传递。所以表输入有sql:
select * from ?
这个表输入从Get Variables
我定义了一个名为'table_name'
. 当我运行转换时,我传入表名。
我需要这样做,因为表名的形式是 abc_ddmmyyyy 并且 ddmmyyyy 可以变化。
我正在进行 pentaho 转换并使用表格输入。条件是表的名称将作为参数动态传递。所以表输入有sql:
select * from ?
这个表输入从Get Variables
我定义了一个名为'table_name'
. 当我运行转换时,我传入表名。
我需要这样做,因为表名的形式是 abc_ddmmyyyy 并且 ddmmyyyy 可以变化。
使用 ${TABLE_NAME} 等变量。? 表示准备好的陈述,对你的工作没有好处。
您是否考虑过使用元数据注入?这是一篇可以提供帮助的文章: http ://www.pentahoevalcenter.com/data-integration/dynamic-step-metadata/
还有一篇关于每个文件名运行一次转换的文章: http ://www.timbert.net/doku.php?id=techie:kettle:jobs:processtransonceperfile
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}