【问题标题】:PDI: Returning the result of a SELECT-statement to the datastreamPDI:将 SELECT 语句的结果返回到数据流
【发布时间】:2014-08-27 10:44:19
【问题描述】:

使用 PDI (Kettle) 我正在使用 CSV InputTable 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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多