我是Pentaho数据集成的新手;我需要将一个数据库集成到另一个位置作为ETL Job。我想在ETL作业期间计算插入/更新的数量,并将该计数插入另一个表。任何人都可以帮我吗?
答案 0 :(得分:4)
我不认为有一个内置功能可以返回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;
但是,您的目标是在PDI作业中执行此操作,因此我建议您尝试到达控制SQL脚本的位置。
建议:将源数据保存在目标数据库服务器上的文件中,然后使用它(可能具有批量加载功能)来插入/更新,然后将受影响的行数保存到PDI变量。请注意,您可能需要使用作业范围内的SQL脚本步骤。
编辑:实施是选择设计的问题,因此建议的解决方案是其中之一。在很高的层次上,您可以执行以下操作。
编辑2:另一个建议的解决方案
根据@ user3123116的建议,您可以使用比较字段步骤(如果不是您环境的一部分,请查看市场内容)。
我看到的唯一缺点是你必须在插入/更新之前查询目标数据库,这当然是性能较差的。
另请注意,您可以拆分源数据流的输入(COPY,而不是DISTRIBUTE),并进行插入/更新,但此流必须等待才能将字段比较的流转换为结束目标数据库上的查询,否则您可能会得到错误的统计信息。
答案 1 :(得分:3)
"比较字段"步骤将采用2个流作为输入进行比较,其输出为4个不同的流,用于"相同",更改","添加"和"删除"记录。您可以计算这4个,然后处理"更改","添加"和"删除"带有插入/更新的记录。
答案 2 :(得分:2)
您可以从转换设置中的“记录”选项执行此操作。请按照以下步骤操作: