我是Pentaho数据集成的新手; 我需要将一个数据库集成到另一个位置作为ETL Job.我想在ETL作业期间计算插入/更新的数量,并将该计数插入另一个表.谁可以帮我这个事?
迄今为止,我认为没有内置功能可以返回PDI 中插入/更新步骤的受影响行数。
尽管如此,大多数数据库供应商都能够为您提供从给定操作中获取受影响行数的功能。
例如,在 PostgreSQL 中,它看起来像这样:
/* Count affected rows from INSERT */
WITH inserted_rows AS (
INSERT INTO ...
VALUES
...
RETURNING 1
)
SELECT count(*) FROM inserted_rows;
/* Count affected rows from UPDATE */
WITH updated_rows AS (
UPDATE ...
SET ...
WHERE ...
RETURNING 1
)
SELECT count(*) FROM updated_rows;
Run Code Online (Sandbox Code Playgroud)
但是,您的目标是在 PDI 作业中执行此操作,因此我建议您尝试达到控制 SQL 脚本的程度。
建议:将源数据保存在目标数据库服务器上的文件中,然后使用它(可能具有批量加载功能)来插入/更新,然后将受影响的行数保存到 PDI 变量中。请注意,您可能需要在Job范围内使用 SQL 脚本步骤。
编辑:实现是选择设计的问题,因此建议的解决方案是众多解决方案之一。在非常高的层面上,您可以执行如下操作。
编辑2:另一个建议的解决方案
正如 @user3123116 所建议的,您可以使用“比较字段”步骤(如果不是您环境的一部分,请检查市场)。
我看到的唯一缺点是您必须在插入/更新之前查询目标数据库,这当然性能较差。
另请注意,您可以拆分源数据流的输入(COPY,而不是DISTRIBUTE),并进行插入/更新,但是此流必须等待字段比较的流结束对目标数据库的查询,否则您可能最终得到错误的统计数据。
| 归档时间: |
|
| 查看次数: |
1859 次 |
| 最近记录: |