我是五旬节数据集成的新手;我需要将一个数据库集成到另一个位置作为ETL作业。我希望计数ETL作业期间insert/updat的数量,并将该计数插入到另一个表中。有人能帮我吗?
发布于 2015-10-20 08:02:28
我不认为到目前为止,在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脚本的程度。
建议:将源数据保存在目标DB服务器上的文件中,然后使用它(可能具有批量加载功能)插入/更新,然后将受影响的行数保存到PDI变量中。请注意,您可能需要在作业的作用域中使用SQL脚本步骤。
编辑:实现是一个选择设计的问题,所以建议的解决方案是众多的解决方案之一。在一个很高的层次上,你可以做如下的事情。
- If the PDI server is NOT the same as the target DB server:
- Upload the source data file to the server, e.g. with the FTP/SFTP file upload steps
- Use the Execute SQL Script step to:
- Read data from the file and perform the INSERT/UPDATE
- Write the number of affected rows into a table
编辑2:另一个建议的解决方案
正如@user3123116所建议的那样,您可以使用比较字段步骤(如果不是环境的一部分,请查看市场)。
我看到的唯一缺点是在插入/更新之前必须查询目标数据库,这当然是性能较差的。
最后,它可能看起来是这样的(请注意,这只是比较和计数部分):

还请注意,您可以拆分源数据流的输入(复制,而不是分发),并执行插入/更新,但是该流必须等待字段比较的流来结束目标数据库上的查询,否则可能会得到错误的统计信息。
发布于 2015-10-21 15:30:44
“比较字段”步骤将以2个流作为比较的输入,其输出为4个不同的流,用于“相同”、“更改”、“添加”和“删除”记录。您可以对这4条记录进行计数,然后使用Insert/Update处理“更改”、“添加”和“删除”记录。
发布于 2015-10-26 06:30:42
您可以在转换设置中的日志选项中执行此操作。请遵循以下步骤:
https://stackoverflow.com/questions/33230332
复制相似问题