我正在进行pentaho转换并使用表输入。条件是表的名称将作为参数动态传递。所以表输入有sql:
select * from ?
此表输入从Get Variables
步骤获取输入,其中我定义了一个名为'table_name'
的变量。当我运行转换时,我传入tablename。
我需要这样做,因为表名的格式为abc_ddmmyyyy,ddmmyyyy可能会有所不同。
答案 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}之类的变量。 ?意味着准备好的陈述,不会对你的工作有所帮助。