【发布时间】:2014-08-27 10:44:19
【问题描述】:
使用 PDI (Kettle) 我正在使用 CSV Input 和 Table Output 步骤填充数据库的入口阶段。这很好用,但是,我还想确保刚刚插入的数据满足某些条件,例如字段不为 NULL 等。
通常这将是数据库约束的工作,但是,即使数据有问题,我们也希望将数据保留在数据库中(出于调试目的。尝试调试 .csv 文件很痛苦......)。因为它只是一个临时表,它不会对完整性等造成任何麻烦。
为此,我写了一些SELECT Count(*) as test123 ... 语句,它们可以立即显示是否有问题并且易于处理(如果 test123 的值为 0 则一切正常,否则需要中止工作) .
我正在使用 PDI 转换中的 Execute SQL Statements 步骤执行这些语句。我希望结果会自动传递给我的数据流,因此我还使用了Copy rows to result 步骤将其传递给正在执行的作业。
这是最有可能出现问题的地方。
我认为 SELECT 语句的结果不会自动传递给我的数据流,因为当我在主要作业中使用变量 ${test123} 执行 Simple evaluation 时(我认为这将通过执行 SELECT Count(*) as test123 ... 隐式创建)我永远不会得到预期的结果。
我在 PDI 文档中真的找不到任何关于这个问题的线索,所以我希望这里有人对 PDI 有一定的经验并且可以提供帮助。如果还有什么不清楚的地方,只是提示一下,我会编辑帖子以提供更多信息。
最好的问候
编辑: 这是我主要工作的一个简单模型:
开始 --> 加载数据(转换)--> 检查数据(转换)--> 简单评估 --> ...
【问题讨论】:
-
那么您是在数据流来自作业的转换中执行这些 SQL 语句,还是通过连接到您的数据库来检查它?
-
Execute SQL Statements步骤连接到数据库并执行语句。这是在由作业调用的单独转换中完成的。 -
SQL 是必须的吗?在“检查数据”-转换中的 JavaScript-Step 怎么样?
-
在这种情况下 JavaScript 会做什么?我需要查询我的数据以查看其是否有序
-
好的,抱歉。我以为你的数据已经在那里了。作为一个想法:也许您需要在 sql-step 之前生成一个名为 test123 的空行
标签: transformation pentaho etl kettle data-integration