0

使用 PDI (Kettle) 我正在使用一个CSV InputTable Output步骤来填充我的数据库的入口阶段。这很好用,但是,我还想确保刚刚插入的数据满足某些条件,例如字段不为 NULL 等。

通常这将是数据库约束的工作,但是,即使数据有故障,我们也希望将数据保留在数据库中(出于调试目的。尝试调试 .csv 文件很痛苦......)。因为它只是一个临时表,它不会对完整性等造成任何麻烦。

所以为了做到这一点,我写了一些SELECT Count(*) as test123 ...语句来立即显示是否有问题并且很容易处理(如果 test123 的值为 0 一切都很好,否则需要中止工作)。

我正在使用Execute SQL StatementsPDI 转换中的一个步骤执行这些语句。我希望结果会自动传递给我的数据流,因此我还使用了一个Copy rows to result步骤将其传递给正在执行的作业。

这是最有可能出现问题的地方。我认为 SELECT 语句的结果不会自动传递给我的数据流,因为当我Simple evaluation在主要工作中使用变量${test123}(我认为这将通过执行隐式创建SELECT Count(*) as test123 ...)时,我永远不会得到预期的结果。

我在 PDI 文档中真的找不到任何关于这个问题的线索,所以我希望这里有人对 PDI 有一些经验并且可能能够提供帮助。如果仍有不清楚的地方,只需提示一下,我将编辑帖子以提供更多信息。

此致

编辑:这是我主要工作的一个简单模型:

开始 --> 加载数据(转换)--> 检查数据(转换)--> 简单评估 --> ...

4

1 回答 1

1

如果我正确阅读了您的帖子,您正在混淆一些概念。

  1. 您不需要执行 SQL 脚本,这是表格输入步骤的作业。只需在表格输入中键入您的查询,您就可以预览您的数据,并通过在后续步骤中使用预览来查看它从该步骤进入数据流。执行 SQL 脚本不是输入步骤,这意味着它不会将外部数据添加到您的数据流中。

  2. 输出字段不是变量。使用“设置变量”步骤设置变量,该步骤采用单个输入行并将特定字段映射到变量,该变量可以在父作业或根作业级别持久化。字段就是:字段。如果您有一个 Copy rows to result 步骤,它们会从一个步骤传递到下一个步骤,并最终传递给父作业,但它们不是变量。

于 2014-08-28T09:43:27.437 回答