使用PDI(Kettle)我使用CSV Input
和Table Output
步骤填充数据库的入门阶段。这很好用,但是,我还想确保刚刚插入的数据满足某些条件,例如:字段不是NULL等等。
通常这将是数据库约束的工作,但是,我们希望将数据保留在数据库中,即使它有问题(出于调试目的。尝试调试.csv文件很痛苦......)。因为它只是一个临时表,它不会导致任何完整性问题等。
为了做到这一点,我写了一些SELECT Count(*) as test123 ...
语句,可以立即显示是否有错误并且易于处理(如果test123的值为0,则一切都很好,否则工作需要中止)。
我正在PDI转换中使用Execute SQL Statements
步骤执行这些语句。我希望结果会自动传递给我的数据流,所以我还使用Copy rows to result
步骤将其传递给正在执行的作业。
这是问题最有可能找到的地方。
我认为SELECT语句的结果没有自动传递给我的数据流,因为当我在主作业中使用变量Simple evaluation
执行${test123}
时(我认为这将通过执行{隐式创建) {1}})我从未得到预期的结果。
我无法在PDI文档中找到任何有关此问题的线索,因此我希望此处有人可以获得PDI的一些经验并可能提供帮助。如果某些内容仍然不清楚,只需提示,我将编辑帖子并提供更多信息。
最好的问候
编辑: 这是我主要工作的一个简单模型:
开始 - >加载数据(转换) - >检查数据(转换) - >简单评估 - > ...
答案 0 :(得分:1)
如果我正确阅读你的帖子,你会混淆一些概念。
您不需要执行SQL脚本,这是表输入步骤的作业。 只需在表格输入中键入您的查询,您就可以预览数据,并通过在后续步骤中使用预览来查看数据流入数据流的步骤。执行SQL脚本不是输入步骤,这意味着它不会将外部数据添加到数据流中。
输出字段不是变量。使用“设置变量”步骤设置“变量”,该步骤采用单个输入行并将特定字段映射到变量,该变量可以在父作业或根作业级别保留。字段就是:字段。它们通过跳跃从一步传递到下一步,如果你有一个复制行到结果步骤,它们最终会传递到父作业,但它们不是变量。