如何获取由java应用程序

时间:2017-12-07 09:17:17

标签: kettle

我已成功编写了一个java程序,将ktr文件发送到远程Kettle平台执行。 java程序将在数据库中加载任务并将相关的ktr发送到Kettle来执行。我的问题是我不知道如何优雅地获得此任务的Kettle Trans执行结果,因为我不知道如何通过某个任务过滤掉trans日志。

我目前的解决方案是阅读Ketlle Trans Log,这是由Kettle自己生成的数据库日志表之一。

此解决方案中的问题是因为所有字段和相关数据都是由Kettle提供的,我无法分辨哪个日志与哪个任务相关。因此,我必须使用任务ID重命名transmeta中的transname,然后将任务ID传递到transname字段中的Trans Log表。通过这种方式,我可以通过任务ID获取相关的日志记录。

private void startClusterTrans(String repoConnectStr, String transName, String taskId) throws PlatformException {
    Repository repository = null;
    TransMeta transMeta = null;
    try {
        repository = getKettleRepository(repoConnectStr);

        // 1: find the trans to execute by transName
        transMeta = findTransMeta(transName, repository);

        // 2: set the trans name with task id
        //    later the taksId will be passed to transname field in the trans log table
        transMeta.setName(taskId);
        TransExecutionConfiguration transExecutionConfiguration = new TransExecutionConfiguration();
        transExecutionConfiguration.setLogLevel(LogLevel.BASIC);
        transExecutionConfiguration.setExecutingClustered(true);
        ...
        transExecutionConfiguration.setVariables(transMeta);

        Trans.executeClustered(transMeta, transExecutionConfiguration);
    } catch (Throwable e) {
        throw new PlatformException(e);
    }
}

我认为这种方法并不优雅。首先,我必须每隔几秒扫描一次数据库并导致数据库压力。其次,如果以群集模式执行trans,则将更改transname。

有人会告诉我是否有其他常用方法来过滤执行结果?我希望在本地,远程和集群模式下执行trans时,获取结果的方式是相同的。

为了详细说明我的问题,我们以集群模式为例。我启动一个java任务#1001,它将以集群模式执行foo.ktr。在这种情况下我有1个主人和2个奴隶。执行后,将在trans日志表中生成3条记录。可悲的是,我不知道如何将3个trans日志链接到我的任务#1001。

现在我的解决方法是在将foo.ktr发送到集群之前,我将transmeta的transname更改为task#1001,并且在执行之后,trans日志表中3个trans记录的transname字段将看起来像1001 (my-cluster-sth); 1001(my-cluster:slave1); 1001(my-cluster:slave2)。因此,我必须使用“LIKE”关键字将这3条记录链接到我的任务。我不认为这是一个好方法。上面提到了两个问题。

1 个答案:

答案 0 :(得分:0)

请upvote http://jira.pentaho.com/browse/PDI-16549http://jira.pentaho.com/browse/PDI-10912

如果我确实理解了您的目标,那么在可预见的将来,您需要知道运行转换的参数值。所以,upvote也http://jira.pentaho.com/browse/PDI-16550