PDI - 更新记录表中的字段值

PDI - Update field value in Logging tables

我正在尝试创建一个可以更改数据库中字段值的转换(我使用的是 postgreSQL)。

案例: 在 postgre db 中,我有 table 称为 Monitoring,它有几个字段,如 id, date, starttime, endtime, duration, transformation name, status, desc。我从转换日志记录中获得的所有这些价值。

因此,当我 运行 转换时,它将插入 Monitoring table 并使用 Running 设置字段 status 的值。完成后,它会将状态更新为 Finish。我正在尝试的是自己在 table 字段中定义值,而不是从 Transformation Logging 中获取它,这样我就可以按照自己的意愿自定义值。

目标是 Update transformation status value from 'running' to 'finish/error/abort etc' in my db using pentaho and display that status in web app

我想用 Modified Java Script 步骤来做,但是否还有其他方法?一个更好的。 (只是需要对此发表意见)

修改后的 javascript 不是一个好主意。理想情况下,由于性能问题不应使用它。您可以使用 "add constant" 步骤或 "User defined Java Class" 作为替代。

除了我的话,你试过Value Mapper吗?

您不能更改内置日志记录 table 的值,原因很简单,它们是为 PDI 使用保留的。这会在出现硬错误时导致一个已知问题:例如,当数据库服务器崩溃时,或者当 NullException 未被 DPI 代码捕获时,状态未设置为完成。

你有一些变通办法。

  • 最简单的,在ETL-Pilot中用到的就是测试(Status=Finish OR LogDate<15分钟前)的web app。

  • 当转换不是 运行 时,您可以更新 table。例如,放置一个每小时(或更少)的 crontab,将其 LogDate 早于 1500 万的任何转换的状态更改为完成。这个 crontab 可能是一个简单的 SQL 或包含在一个转换中,该转换还检查 tables 大小 and/or 如果出现潜在错误,请发送电子邮件。

  • 您可以复制table(如果它是您的数据库系统中的非锁定操作),修改状态列并将此table用于您的网络应用程序。